"t_command:='select :1 from tab_test where col1=1'; --不可以 "1.不是不可以,是因为你在execute immediate t_command into value漏了using col_2,
2.是绑定变量不是绑定字段,你对绑定“变量”的含义没搞透,
上句就与:select 常数 from XXX 类似,你的字段.....建议查询动态SQL的参考书
2.是绑定变量不是绑定字段,你对绑定“变量”的含义没搞透,
上句就与:select 常数 from XXX 类似,你的字段.....建议查询动态SQL的参考书
解决方案 »
- 在创建目录的时候create directory .....后面的目录如果不在本地,是远程服务器的下的共享目录,如何来实现这个功能呢?
- 怎么将企业管理器地址由127.o.o.1改为localhost
- 求助!!!关于like的问题
- scott 的 emp 表一个奇怪的现象!
- 关于日期比较问题(高分赠送)
- ORACLEZ中是不是有个参数设置 '' 与 null的关系的?
- 求救:ORACLE的索引问题
- 参数pctfree和pctused是做什么用的。
- 存储过程中,能不能执行 create 命令?
- 关于临时表空间
- replace 问题 !!!
- ora-12500 : TNS:监听程序无法启动专用服务器进程
execute immediate t_command into value using col_2
也是不行,
而且用 DBMS_SQL包也是一样的问题
2 col1 number,
3 col2 number);表被创建SQL>
SQL> insert into tab_test values (1, 1001);1 行 已插入SQL> insert into tab_test values (2, 1002);1 行 已插入SQL> insert into tab_test values (3, 1003);1 行 已插入SQL> insert into tab_test values (4, 1004);1 行 已插入SQL> set serveroutput on;
SQL> declare
2 --col_1 varchar2(20);
3 col_2 varchar2(20);
4 t_command varchar2(100);
5 value varchar2(100);
6 begin
7 col_2:='COL2';
8 t_command:='select :1 from tab_test where col1=1'; --不可以
9 --t_command:='select '||col_2||' from tab_test where col1=1'; --可以 -
10 execute immediate t_command into VALUE using col_2;
11 dbms_output.put_line(value);
12 end;
13 /
COL2PL/SQL 过程成功完成SQL>
SQL> SELECT 'COL_2' FROM TAB_TEST WHERE COL1=1;'COL_
-----
COL_2已选择 1 行。
试验如下:
-------------------------------------------------------SQL> SELECT * FROM TAB_TEST; COL1 COL2
---------- ----------
1 1001
2 1002
3 1003
4 1004已选择4行。
SQL> ED
已写入文件 afiedt.buf 1 declare
2 --col_1 varchar2(20);
3 col_2 varchar2(20);
4 t_command varchar2(100);
5 value varchar2(100);
6 begin
7 col_2:='COL2';
8 t_command:='select :1 from tab_test where col1=1'; --不可以
9 --t_command:='select '||col_2||' from tab_test where col1=1'; --可以 -
10 execute immediate t_command into value USING COL_2;
11 dbms_output.put_line(value);
12* end;
SQL> /
COL2PL/SQL 过程已成功完成。
要是按 t_command:='select '||col_2||' from tab_test where col1=1';
结果是 1001
其实要的结果就是 1001
很明显用 t_command:='select :1 from tab_test where col1=1';
实际上是 select ‘COL2’ from tab_test where col1=1 传递的是
字符,不是变量的内容
declare
col_1 varchar2(20);
--col_2 varchar2(20);
t_command varchar2(100);
value varchar2(100);
begin
col_1:=1;
t_command:='select col2 from tab_test where col1=:1'; --不可以
--t_command:='select '||col_2||' from tab_test where col1=1'; --可以 -
execute immediate t_command into value using col1;
dbms_output.put_line(value);
end;
1001
这里用 where col1=:1 这样绑定就没问题
为什么绑顶字段,表的时候 用USING 传递的是变量名'COL2'
要是绑定的是值时就传递变量内容 1
大家帮我一起思考一下
是否符合数据字典的要求,是否有查询此字段的权限...只好用了一个占位符,
直到执行时才把占位符换成了'col_2'....反正我是这么理解的,不知道是不是把你说糊涂了,呵呵...