【问题标题】:ORA-01756: quoted string not properly terminatedORA-01756: 引用的字符串未正确终止
【发布时间】:2009-09-02 12:04:06
【问题描述】:
please let me know the issue with following script (sql,oracle 10g)

  1  DECLARE @colname AS NVARCHAR(50)
  2  DECLARE @tablename AS NVARCHAR(500)
  3  DEClARE @query AS NVARCHAR(500)
  4  SET @colname = 'select wk_units1 from cnt_sls_dm.fct_sales_summary'
  5  SET @tablename = 'SELECT tablename from dmi_user.fct_sales_meta'
  6  set @query='select '+@colname+' FROM '+@tablename+'
  7* EXECUTE sp_executesql @query
SQL> /
ERROR:
ORA-01756: quoted string not properly terminated

【问题讨论】:

  • 这不是 T-SQL(MS SQL) 查询吗?

标签: sql oracle plsql


【解决方案1】:

这个错误是自我描述的,你有一个未终止的报价。

您正在尝试在Oracle 中运行SQL Server 代码。这行不通。

您不能仅仅通过复制将T-SQL 变成PL/SQL

我更正了语法,但很可能您需要做更多的工作。

DECLARE
    colname NVARCHAR2(50);
    tname   NVARCHAR2(500);
    query   NVARCHAR2(500);
BEGIN
    SELECT  wk_units1
    INTO    colname
    FROM    cnt_sls_dm.fct_sales_summary;
    SELECT  tablename
    INTO    tname
    FROM    dmi_user.fct_sales_meta;
    query := 'SELECT ' || colname || ' FROM ' || tname;
END;

【讨论】:

    【解决方案2】:

    将第 6 行改为

    set @query='select '+@colname+' FROM '+@tablename
    

    【讨论】:

    • 他实际上是在尝试在Oracle 中运行SQL Server 查询。
    • 嗨,我收到以下错误,但如果我运行查询 saperatley,他们会在第 1 行将结果作为一条记录错误:ORA-01403:未找到数据 ORA-06512:在第 10 行
    • @Quassnoi,一大早就错过了 :(
    【解决方案3】:

    您的示例中的第 6 行似乎不正确:

    set @query='select '+@colname+' FROM '+@tablename+'
    

    您以' 结束这一行。要么删除+',要么使用where 语句完成请求...

    【讨论】:

      【解决方案4】:

      这看起来很像 tSql 而不是 pl SQl,您可能想要使用 ||在 Oracle 和 varchar2 中连接字符串而不是 nvarchar

      【讨论】:

        【解决方案5】:

        以下是回答问题的正确方法............ 运行良好………… 感谢所有帮助过的人......

        -欧文

        DECLARE
             type fct_sales_summary_cur is table of dmi_user.fct_sales_summary_cmp_1%rowtype index by binary_integer;
             cur_rec fct_sales_summary_cur;
                    colname NVARCHAR2(50);
                    tname   NVARCHAR2(500);
                    query   VARCHAR2(500);
                    cnt     number:=1;
            BEGIN
                    loop
                    SELECT  colname
                    INTO    colname
                    FROM    dmi_user.FCT_SALES_META
                    where   sno=cnt;
                    SELECT  tablename
                    INTO    tname
                    FROM    dmi_user.fct_sales_meta
                    WHERE sno=cnt;
                    --query:='select * from dmi_user.fct_sales_summary_cmp';
                    query := 'SELECT '|| colname ||' FROM '||tname;
                    -- dbms_output.put_line(colname);
                    -- dbms_output.put_line(tname);
                    --dbms_output.put_line(query);
                    execute immediate query bulk collect into cur_rec;
                    --dbms_output.put_line(cur_rec);
                    dbms_output.put_line('------Table-Sno -----' || cnt);
                    for i in cur_rec.first..cur_rec.last loop
                    dbms_output.put_line(cur_rec(i).wk_units1);
                    end loop;
                    cnt:=cnt+1;
            exit when cnt=4;
            end loop;
            END;
        /
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-09
          • 2022-01-12
          • 1970-01-01
          • 1970-01-01
          • 2019-07-22
          • 2020-12-27
          • 1970-01-01
          相关资源
          最近更新 更多