Como poner una variable en el from

azkue
18 de Enero del 2006
Intento hacer una query y en el apartado from quiero poner una variable, no me lo deja.

Alguna solución?

Muchas gracias

andrewsreid
18 de Enero del 2006
Hay que hacerlo con SQL dinámico.
Puedo mostrarte un ejemplo si quieres.

azkue
18 de Enero del 2006
Si por favor!!!

andrewsreid
18 de Enero del 2006
Espero que estos ejemplos te ayudan.
Acabo de hallarlos.
Los creé hace mucho tiempo:

SQL> @dynamic3
SQL> --
SQL> -- More examples of dynamic SQL using EXECUTE IMMEDIATE:
SQL> --
SQL> DECLARE
2 TABLE_NAME VARCHAR2(30);
3 ROW_COUNT NUMBER;
4 BEGIN
5 TABLE_NAME := 'DBA_TABLES';
6 EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||TABLE_NAME INTO ROW_COUNT;
7 DBMS_OUTPUT.PUT_LINE(TABLE_NAME||' HAS '||ROW_COUNT||' ROWS');
8 END;
9 /
DBA_TABLES HAS 1108 ROWS

PL/SQL procedure successfully completed.

SQL> SELECT COUNT(*) FROM DBA_TABLES
2 /

COUNT(*)
----------
1108

SQL> DECLARE
2 TABLE_NAME VARCHAR2(30);
3 ROW_COUNT NUMBER;
4 CONDITION VARCHAR2(30);
5 BEGIN
6 TABLE_NAME := 'DBA_OBJECTS';
7 CONDITION := 'OBJECT_NAME LIKE ''A%''';
8 EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM '||TABLE_NAME||
9 ' WHERE '||CONDITION INTO ROW_COUNT;
10 DBMS_OUTPUT.PUT_LINE(TABLE_NAME||' HAS '||ROW_COUNT||' ROWS WHERE '||CONDITION);
11 END;
12 /
DBA_OBJECTS HAS 309 ROWS WHERE OBJECT_NAME LIKE 'A%'

PL/SQL procedure successfully completed.

SQL> SELECT COUNT(*) FROM DBA_OBJECTS
2 WHERE SUBSTR(OBJECT_NAME,1,1) = 'A'
3 /

COUNT(*)
----------
309

SQL> CREATE OR REPLACE FUNCTION TABCOUNT (
2 TAB IN VARCHAR2,
3 WHR IN VARCHAR2 := NULL)
4 RETURN PLS_INTEGER
5 IS
6 ROW_COUNT PLS_INTEGER;
7 BEGIN
8 EXECUTE IMMEDIATE
9 'SELECT COUNT(*) FROM '||TAB||
10 ' WHERE '||NVL(WHR,'1=1')
11 INTO ROW_COUNT;
12 RETURN ROW_COUNT;
13 END TABCOUNT;
14 /

Function created.

SQL> EXEC DBMS_OUTPUT.PUT_LINE(TABCOUNT('DBA_INDEXES'))
1306

PL/SQL procedure successfully completed.

SQL> /

Function created.

SQL> SELECT COUNT(*) FROM DBA_INDEXES
2 /

COUNT(*)
----------
1306

SQL> SELECT TABCOUNT('DBA_INDEXES','INDEX_NAME LIKE ''A%''') FROM DUAL
2 /

TABCOUNT('DBA_INDEXES','INDEX_NAMELIKE''A%''')
----------------------------------------------
15

SQL> SELECT COUNT(*) FROM DBA_INDEXES
2 WHERE SUBSTR(INDEX_NAME,1,1) = 'A'
3 /

COUNT(*)
----------
15

SQL>


azkue
18 de Enero del 2006
Así me gusta Andrew!!!!!!!!
Muchisimas gracias, haber como me arreglo ahora, pero me imagino que con esto ya me saldra!

Thank you!!!!!!!