我正在构建Dynamic Sql,不明白如何在select语句中使用单引号,其中包含一些变量
对于例如
SELECT ABC.NEXTVAL,'||val_name||' Vname,'||ta_tab||' Tname,'||', Accnt_id, rowid from emp;
其中val_name和ta_tab不是表Emp的列,但是这些是在块中计算的变量,我要求它们直接插入到另一个表中。
如何解决这个,我尝试使用'双引号',但它不起作用,并且不打印变量值(它被视为字符串)
答案 0 :(得分:2)
正如其他人所提到的,这里不需要动态SQL 。
但是,如果你只是想知道如何使用单引号进行学习,这是一个例子,
SQL> SET serveroutput ON
SQL> DECLARE
2 val_name VARCHAR2(10);
3 ta_tab VARCHAR2(10);
4 v_str VARCHAR2(100);
5 A VARCHAR2(10);
6 b VARCHAR2(10);
7 c VARCHAR2(10);
8 d NUMBER;
9 BEGIN
10 val_name := 'LALIT';
11 ta_tab := 'TEST';
12 v_str :='SELECT '''||val_name||''', ename,'''||ta_tab||''', sal from emp where empno = 7788';
13 EXECUTE IMMEDIATE v_str INTO A,b,c,d;
14 dbms_output.put_line(a||'-'||b||'-'||c||'-'||d);
15 END;
16 /
LALIT-SCOTT-TEST-3000
PL/SQL procedure successfully completed.
还有其他一些事项要记住,比如使用绑定变量等。但是,它超出了本主题的范围。
答案 1 :(得分:1)
您可以使用文字引语:
stmt := q'[SELECT ABC.NEXTVAL,'||val_name||' Vname,'||ta_tab||' Tname,'||', Accnt_id, rowid from emp]';
文字的文档可以在这里找到:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements003.htm#sthref344
或者,您可以使用三个引号来表示单引号:
stmt := 'SELECT ABC.NEXTVAL,'''||val_name||''' Vname,'''||ta_tab||''' Tname,'''||''', Accnt_id, rowid from emp';
使用Q语法的文字引用机制更灵活,更易读,IMO。
答案 2 :(得分:0)
为什么不能直接在SQL中使用变量,而不是使用动态sql? E.g:
HTTP/1.1 200 OK
Server: Apache/2.4.18 (Ubuntu)
ETag: "dd6d718cc03aac91085163fd1927f07a-gzip"
Vary: Accept-Encoding
Content-Type: text/html; charset=UTF-8
Date: Wed, 03 Feb 2016 13:17:48 GMT
X-Varnish: 1965452251 1965452250
Age: 13
Via: 1.1 varnish
Connection: keep-alive
答案 3 :(得分:0)
团队,我找到了答案。在oracle我必须使用' 3次
E.g。
stmt:='选择ABC.NEXTVAL,'' || val_name ||''' VNAME,''' || || ta_tab''' Tname,'' ||'',Accnt_id,来自emp'
的rowid以上查询有效。感谢!!!