1

下面的语句混合使用绑定变量、常量和 Oracle 关键字进行插入。ABC REVIEW并且N是要插入的实际值。

l_sql :='INSERT INTO EMP
         (BUSINESS_DATE,GROUP_NAME, DELETED,UPDATE_DATE) VALUES
          (:BIZ_DATE,ABC REVIEW,N,SYSDATE)';

这是使用动态 SQL 进行参数引用的正确方法吗?它不需要额外的括号吗?

4

3 回答 3

2

只需避开实际字符串值周围的引号:

  l_sql :='INSERT INTO EMP
     (BUSINESS_DATE,GROUP_NAME, DELETED,UPDATE_DATE) VALUES
      (:BIZ_DATE,''ABC REVIEW'',''N'',SYSDATE)';
于 2018-05-15T04:24:26.607 回答
1

ABC REVIEW 和 N 是要插入的实际值。

如果您没有在 ' '(引号)中包含文字,那么 Oracle 会将它们视为变量并期望值。在您的情况下,这是导致错误的原因。@user7294900 建议的绝对是正确的解决方案,但是它需要高精度,同时引用有时会导致问题的引号。Oracle 引入q'[了处理这种情况,您只需将语句放在 a 中q'[,oracle 将处理引号。见下文:

l_sql :=q'[INSERT INTO EMP
         (BUSINESS_DATE,GROUP_NAME, DELETED,UPDATE_DATE) VALUES
          (:BIZ_DATE,'ABC REVIEW','N',SYSDATE)]';

阅读更多关于q'http://www.oracle-developer.net/display.php?id=311

于 2018-05-15T06:28:01.437 回答
0

我意识到它可以使用管道连接。

l_sql='INSERT INTO EMP
       (BUSINESS_DATE,GROUP_NAME,DELETED,UPDATE_DATE) VALUES
        (:BIZ_DATE,'|| 'ABC REVIEW'|| ','|| 'N'|| ',SYSDATE);
于 2018-05-15T07:26:45.227 回答