oracle 动态SQL是否可以用子查询呢?请帮忙解答!

下面是我使用的一个语句!
sql_stat:='select * from (select rownum as rn,t.* from emp t ) where rn > :no1 and rn <= :no2 ';
execute immediate sql_stat bulk collect into emp_table using l_begin,l_end ;

第1个回答  2013-01-18
可以,例
--创建TTT表
CREATE TABLE TTT AS SELECT LEVEL ID FROM DUAL CONNECT BY LEVEL<100;
--创建SUB_TTT表
CREATE TABLE SUB_TTT AS SELECT 1 ID,'A' DOC FROM DUAL UNION SELECT 2 ID,'B' DOC FROM DUAL UNION SELECT 3 ID,'C' DOC FROM DUAL;

--在SUB_TTT表中计算ID小于指定值的个数,并且这些ID要在TTT表中出现
DECLARE
CNT NUMBER := 0;
SQL_STR VARCHAR2(100) := 'SELECT COUNT(1) CC FROM SUB_TTT A WHERE EXISTS(SELECT 1 FROM TTT B WHERE A.ID=B.ID AND B.ID<:ID)';
BEGIN
EXECUTE IMMEDIATE SQL_STR
INTO CNT
USING 5;
DBMS_OUTPUT.PUT_LINE(CNT);
END;

如何用oracle动态查询一张表里面的某些列?
但是,不可以使用绑定参数为动态SQL传递模式对象。在用于单行查询时,INTO子句要指明用于存放检索值的变量或记录。对于查询检索出来的每一个值,INTO子句中都必须有一个与之对应的、类型兼容的变量或字段。在用于DML操作时,RETURNING INTO子句要指明用于存放返回值的变量或记录。对于DML语句返回的每一个值,...

oracle 在存储过程中用动态sql创建序列为何会遇到权限不足的问题呢?
create or replace procedure create sequence 都需要权限。。。用sysdba给该用户grant一个吧。。GRANT EXECUTE ANY PROCEDURE TO 普通用户 WITH ADMIN OPTION;GRANT RESOURCE TO 普通用户; --这个已经包含了序列的权限

oracle怎么创建动态sql(急)
for r1 in c1 loop c_sql := c_sql ||' ' || r1.column_name ||',' ;end loop ;c_sql := 'SELECT '|| substr(c_sql,1,length(c_sql)-1) || ' FROM '||upper(c_tab_name) ;return c_sql ;end get_sql_of_tab ;\/ ---以下是PL\/SQL命令窗口函数的效果--- SQL> se...

oracle将查询的结果值作为下一个查询的字段列。
4、小结:动态游标可以胜任大多数动态SQL的需求了,使用简洁方便居家旅行之必备杀人放火之法宝。二、使用 EXECUTE IMMEDIATE 最早大家都使用DBMS_SQL包,但是太太麻烦了,最终都放弃了。但是自从有了EXECUTE IMMEDIATE之后,但要注意以下几点:EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并...

oracle中,如何将动态SQL文查询出来的结果导出成CSV文件
调用spool命令就可以了。define fil=p||N.csv spool &fil select ...spool off;你前面发过这个了。

oracle中动态sql中的using、into各是什么作用?通俗地讲,别用书面语
比如说 V_SQL_T := 'SELECT SUM(QTY), SUM(COST * QTY)FROM SALES WHERE SALE_DATE = :1';EXECUTE IMMEDIATE V_SQL_T INTO T_QTY, T_AMT USING D_SALESDATE;上面INTO就是要sum(qty)和sum(cost*qty)赋值到t_qty和t_amt两个变量,using就是把d_salesdate变量代入:1作为条件 ...

Oracle 动态SQL ,缺失表达式, 求解!
STR_SQL:= 'SELECT STEP_ID FROM '||P_TABLE_NAME||' WHERE '||V_ID||'='||P_BILL_NO;EXECUTE IMMEDIATE STR_SQL INTO V_STEP_ID;这样就OK了

关于oracle8i的带参数游标用法的问题
较好的pl\/sql程序设计是在pl\/sql块中使用象dbms_sql这样的内建包或执行execute immediate命令建立动态sql来执行ddl命令,pl\/sql编译器保证对象引用以及用户的权限。 下面我们将讨论各种用于访问oracle数据库的ddl和tcl语句。 查询 select语句用于从数据库中查询数据,当在pl\/sql中使用select语句时,要与into子句一起使用...

Oracle查询速度优化问题
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*' 是一个方便的方法.不幸的是,这是一个非常低效的方法. 实际上,ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间.7. 减少访问数据库的次数 当执行每条SQL语句时,...

oracle 存储过程里用 execute immedate 动态sql,更新一个表的clob字段...
可以使用绑定变量的方式来做。V_SQL := 'UPDATE B '|| ' SET B_CLOB = ''' || AA.A_CLOB ||''' WHERE B_KEY = '''|| AA.A_KEY || ''';EXECUTE IMMEDIATE V_SQL;改成:V_SQL := 'UPDATE B SET B_CLOB =:1 WHERE B_KEY =:2 ';EXECUTE IMMEDIATE V_SQL using AA....

相似回答