【问题标题】:Create a table with oracle pl/sql使用 oracle pl/sql 创建表
【发布时间】:2017-08-07 15:36:48
【问题描述】:

我收到此错误 ORA-00933:SQL 命令未正确结束,但我看不出问题所在。

创建包:

CREATE OR REPLACE PACKAGE "TOOL_PKG" IS 
   PROCEDURE CREATE_ZTEMP_CLAIMS_TABLES;
END TOOL_PKG;
/

为包创建一个过程。我在尝试运行该过程时遇到错误。

我想做的是用现有表创建一个新表。我需要它是动态的,因为我将在列表中添加更多表格。

CREATE OR REPLACE PACKAGE BODY CUBS_OWNER."TOOL_PKG" IS 
PROCEDURE CREATE_NEW_TABLE IS

        type array_t is table of varchar2(50) index by pls_integer;
        my_table_t array_t;
        elem varchar2(50);
        c int;
    BEGIN
        my_table_t (1) := 'MY_TABLE';

        elem := my_table_t.first;
        while elem is not null loop
            select count(*) into c from user_tables where table_name = upper('ZTEST_'||my_table_t(elem));
            if c=0 then
                 Begin
                    execute immediate 'CREATE TABLE upper(NEWX_'||my_table_t(elem)||') AS SELECT * FROM upper('||my_table_t(elem)||') where rownum=0';
                    COMMIT;
                    DBMS_OUTPUT.put_line ('ZTEST_'||my_table_t(elem)||' created.');
                 EXCEPTION
                 WHEN OTHERS
                    THEN
                    DBMS_OUTPUT.put_line (
                        'tool_pkg.create_new_table...failed creating table '
                        || CHR (10)
                        || SQLERRM);
                 END;
            end if;
            elem := my_table_t.next(elem);
        end loop;

    EXCEPTION
        WHEN OTHERS
        THEN
            DBMS_OUTPUT.put_line (
               'tool_pkg.create_new_table...failed creating table  '
            || CHR (10)
            || SQLERRM);
   END;

END tool_pkg;
/

【问题讨论】:

    标签: oracle plsql procedure


    【解决方案1】:

    我必须确保上面的方法在引号之外。

    不是这个

    execute immediate 'CREATE TABLE upper(NEWX_'||my_table_t(elem)||') AS SELECT * FROM upper('||my_table_t(elem)||') where rownum=0';
    

    必须是这种形式

    execute immediate 'CREATE TABLE '||upper('NEWX_'||my_table_t(elem))||' AS SELECT * FROM '||upper(my_table_t(elem))||' where rownum=0';
    

    【讨论】:

      猜你喜欢
      • 2022-08-17
      • 2016-02-19
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2020-03-13
      • 2011-12-13
      • 1970-01-01
      相关资源
      最近更新 更多