Declare
v_table varchar2(20);
v_sql Varchar2(100);
Begin
v_table:='hqf.testtable';
v_sql:='select * from '||v_table;
dbms_output.put_line(v_table);
dbms_output.put_line(v_sql);
Execute Immediate v_sql;
End;
Declare
v_sid Integer:=20020101;
v_sql Varchar2(100);
v_result Varchar2(50);
Begin
--v_sid:=12;
v_sql:='Select loc into v_result from scott.dept d where d.deptno=:1 ';
dbms_output.put_line(v_sql);
--dbms_output.put_line(v_result);
Execute Immediate v_sql
Using 10 ;
Commit;
End;
这是个动态语句的实例但是为什么表名不能作为绑定变量使用呢?
例如:把第一个实例给为:
Declare
v_table varchar2(20);
v_sql Varchar2(100);
Begin
v_table:='hqf.testtable';
v_sql:='select * from :1'e;
dbms_output.put_line(v_table);
dbms_output.put_line(v_sql);
Execute Immediate v_sql using v_table ;
End;
这样做的话总是提示表名无效,请问这是什么内部机制,还是我已经超出动态语句的适用范围?
那位高人能够指点一下。谢了!
v_table varchar2(20);
v_sql Varchar2(100);
Begin
v_table:='hqf.testtable';
v_sql:='select * from '||v_table;
dbms_output.put_line(v_table);
dbms_output.put_line(v_sql);
Execute Immediate v_sql;
End;
Declare
v_sid Integer:=20020101;
v_sql Varchar2(100);
v_result Varchar2(50);
Begin
--v_sid:=12;
v_sql:='Select loc into v_result from scott.dept d where d.deptno=:1 ';
dbms_output.put_line(v_sql);
--dbms_output.put_line(v_result);
Execute Immediate v_sql
Using 10 ;
Commit;
End;
这是个动态语句的实例但是为什么表名不能作为绑定变量使用呢?
例如:把第一个实例给为:
Declare
v_table varchar2(20);
v_sql Varchar2(100);
Begin
v_table:='hqf.testtable';
v_sql:='select * from :1'e;
dbms_output.put_line(v_table);
dbms_output.put_line(v_sql);
Execute Immediate v_sql using v_table ;
End;
这样做的话总是提示表名无效,请问这是什么内部机制,还是我已经超出动态语句的适用范围?
那位高人能够指点一下。谢了!
解决方案 »
- 一道sql题目。。。去重复
- 我的oracle的存储过程总报错,请高手帮帮忙!
- sql 如何查找具有最大值的数据 高手进!
- oracle理的SQL语句如何连两个字段并显示
- Oracle表列,行转换问题?
- 非常着急,修改oracle 的db_catch_size参数报错,有没有办法或者脚本修改这个参数
- oracle 里面的很多用户一开始就是expired,怎样能变成可用状态
- OracleOraHome92ClientCache不能启动
- 请问oracle 8.0.5能不能用bulk collect?
- Oracle连接字符串的疑问
- oracle数据库数据文件丢失怎么办,急
- 急急...在線等...ORACLE排序优化,表结构还不能改
V_TABLE VARCHAR2(20);
V_SQL VARCHAR2(100);
BEGIN
V_TABLE := 'scott.emp';
V_SQL := 'select * from ' ;
DBMS_OUTPUT.PUT_LINE(V_TABLE);
DBMS_OUTPUT.PUT_LINE(V_SQL);
EXECUTE IMMEDIATE V_SQL|| V_TABLE;
END;
/在执行execute 的时候bind变量不能用在表上。
个人理解。
也就是争取减少分析、解释和变异的时间,也就是说通过规范和预期,节省时间。
如果连表名都绑定,那整个SQL都变成了不可预期的。
那还绑个啥定呢?
楼主要的其实是动态SQL,算然动态查询可以使用绑定,
但是不代表只有按照使用绑定的写法才能使用动态查询。
具体做法上面两星的兄弟貌似讲过了地说。
个人理解。附议