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;
这样做的话总是提示表名无效,请问这是什么内部机制,还是我已经超出动态语句的适用范围?
那位高人能够指点一下。谢了!
解决方案 »
- 为什么ORA-04030错误会造成TNS无法使用
- 两个游标循环问题
- 数据库表设计问题
- oracle觸發器調用其他usre表得問題
- 新手提问:最简单的存储过程问题!
- JDBC:java.sql.SQLException: 不允许的操作: Unsupported syntax for refreshRow() -- 如何解决?
- 我想请问高手们,我要做一个asp+oracle数据库的图书网站,我只会用asp\access和一点sql server,我需要怎样和懂oracle的人配合
- 请教Oracle 在Linux下安装的问题
- ado.net怎样连接oracle数据库??
- 安装Oracle817自动退出
- 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,算然动态查询可以使用绑定,
但是不代表只有按照使用绑定的写法才能使用动态查询。
具体做法上面两星的兄弟貌似讲过了地说。
个人理解。附议