gpt4 book ai didi

sql - 如果表不存在则插入到其他表中

转载 作者:行者123 更新时间:2023-12-01 22:49:20 26 4
gpt4 key购买 nike

我的程序如下:

create or replace procedure smth
is
some_variable varchar(2;
begin

insert into **table**(col1,col2) (Select id,'text' from TABLE2),
insert into table(col1,col2) (Select id,'text' from TABLE3)

我想要做的是为以下情况添加一些 if-else (或平滑 else)语句:表 2 不存在。如果 Table2 不存在,则从 DUAL 插入到 table ('smth','nameoftable') 中。我确切地知道 table2 的名称是什么。 (但由于某种原因,该表可能会从数据库中删除)。

如果我能这样做那就太好了:

insert into **table**(col1,col2) if table2 doesn't exist then Select (1,'TABLE2') else (Select id,'text' from TABLE2),

if table3 doesn't exist then Select (1,'TABLE3') insert into table(col1,col2) else (Select id,'text' from TABLE3)

对于每种情况。

编辑

 insert into **table**(col1,col2) (Select id,'text' from TABLE2),
insert into table(col1,col2) (Select id,'text' from TABLE3)
insert into table(col1,col2) (Select id,'text' from TABLE4)
insert into table(col1,col2) (Select id,'text' from TABLE4)

假设 table3 不存在,那么我想要的就是 INSERT 到表中(从 Dual 中选择 'text','text2'。

最佳答案

为了得到你想要的东西,你需要两件事

  1. 查找表是否存在:您可以根据user_tables查询table_name 列(如果过程正在从表中读取)相同的架构
  2. 你需要使用动态sql,因为如果表不存在使用 static pl/sql 你会得到错误PL/SQL: ORA-00942: table or View 不存在因为当oracle编译过程时它找不到该表。

动态 plsql 的一个例子是

 sql_stmt := 'insert into table(col1,col2) (Select id,''text'' from ' || <the right table_name> || ')';
EXECUTE IMMEDIATE sql_stmt;

这里是 dynamic sql 的 oracle 文档的链接.

编辑澄清后,可以通过如下程序结束:

  create or replace procedure insert_from_dual_if_not_exists(table_name_in in varchar2)    
begin
.....
if table_exists('<table_name>') then
sql_stmt := 'insert into table(col1,col2)' (Select id,''text'' from ' || <the right table_name> || ')';
else
sql_stmt := 'insert into table(col1,col2)' (Select ''text1'',''text2'' from dual )';
end if;
EXECUTE IMMEDIATE sql_stmt;
end;

并调用insert_from_dual_if_not_exists而不是简单的插入;您还必须创建一个过程(或一个简单的语句)来告诉您的代码表是否存在。

关于sql - 如果表不存在则插入到其他表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32625651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com