Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果表不存在,则创建表';不存在_Sql_Oracle_Plsql_Ddl - Fatal编程技术网

Sql 如果表不存在,则创建表';不存在

Sql 如果表不存在,则创建表';不存在,sql,oracle,plsql,ddl,Sql,Oracle,Plsql,Ddl,我正在尝试创建一个表,如果它还不存在的话。我目前正在首先检查它是否存在于DBA_表中,如果该查询不返回任何内容,则插入。有没有办法只签入同一条语句,这样我就不必将它分解为单独的查询 这就是我目前拥有的 BEGIN SELECT COUNT(*) INTO lvnTableExists FROM DBA_TABLES WHERE Table_Name = 'SOME_TABLE'; IF lvnTableExists = 0 THEN EX

我正在尝试创建一个表,如果它还不存在的话。我目前正在首先检查它是否存在于
DBA_表中,如果该查询不返回任何内容,则插入。有没有办法只签入同一条语句,这样我就不必将它分解为单独的查询

这就是我目前拥有的

BEGIN
    SELECT COUNT(*)
    INTO lvnTableExists
    FROM DBA_TABLES
    WHERE Table_Name = 'SOME_TABLE';

    IF lvnTableExists = 0 THEN
        EXECUTE IMMEDIATE 'CREATE TABLE SOME_TABLE AS (SELECT * FR0M OTHER_TABLE)';
    END IF;
END;
这是我想要的东西

DECLARE
    sql VARCHAR2(100000);
BEGIN
    sql := 'CREATE TABLE SOME_TABLE ' ||
            'AS (SELECT * FROM OTHER_TABLE) ' ||
            'WHERE NOT EXISTS (SELECT NULL ' ||
            'FROM DBA_OBJECTS d WHERE d.Object_Name = 'SOME_TABLE' AND ' ||
            'd.Owner = 'SOME_TABLE')';
    EXECUTE IMMEDIATE sql;
END;

问题是,您不能将不存在的
作为
语句放入
创建表中。

是的,Oracle没有这一功能真是太遗憾了。我相信总有一天它会来的。在此之前,如果您想编写PL/SQL包装器,为什么不这样做:

DEClARE
     table_exists_already exception; 
     pragma exception_init(table_exists_already, -955 ); 
BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE SOMETABLE...';
EXCEPTION WHEN table_exists_already THEN
  DBMS_OUTPUT.PUT_LINE('Table sometable already exists');
END;
/

是的,甲骨文没有这个功能真是太遗憾了。我相信总有一天它会来的。在此之前,如果您想编写PL/SQL包装器,为什么不这样做:

DEClARE
     table_exists_already exception; 
     pragma exception_init(table_exists_already, -955 ); 
BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE SOMETABLE...';
EXCEPTION WHEN table_exists_already THEN
  DBMS_OUTPUT.PUT_LINE('Table sometable already exists');
END;
/
副本的副本