2009-09-02 244 views
0
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 '[email protected]+' FROM '[email protected]+' 
    7* EXECUTE sp_executesql @query 
SQL>/
ERROR: 
ORA-01756: quoted string not properly terminated 
+4

这不是一个T-SQL(MS SQL)查询? – 2009-09-02 12:10:11

回答

2

更改线路6

set @query='select '[email protected]+' FROM '[email protected] 
+1

他实际上试图在'Oracle'中运行'SQL Server'查询。 – Quassnoi 2009-09-02 12:12:07

+0

你好我收到以下错误,但如果我运行查询saperatley他们在第1行给出的结果的一个记录 错误: ORA-01403:找不到数据 ORA-06512:在第10行 – Irveen 2009-09-02 12:26:29

+0

@Quassnoi,错过了,太早了:( – RedFilter 2009-09-02 12:41:31

5

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

您正在尝试运行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; 
+0

+1,我错过了Oracle的一部分! – RedFilter 2009-09-02 12:32:01

0

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

0

以下是正确的方式来回答问题........ 运行良好.......... 感谢所有谁帮助......

-Irveen

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; 
/