【问题标题】:parameter reference using dynamic SQL使用动态 SQL 的参数引用
【发布时间】:2018-10-24 19:39:55
【问题描述】:

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

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

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

【问题讨论】:

    标签: oracle reference dynamic-sql bind-variables


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-02-03
          • 1970-01-01
          • 2010-11-05
          • 1970-01-01
          • 2020-08-29
          • 1970-01-01
          相关资源
          最近更新 更多