【发布时间】:2015-04-28 13:36:48
【问题描述】:
我正在尝试创建一个执行以下操作的 oracle 过程 transfer_table(table_name)
- 将
table_name放入schema_a - 在
schema_a中创建table_name作为table_name@schema_b的(copy或select *?)
我需要这个过程是安全的:如果 table_name 在 schema_a 中不存在,仍然继续创建它作为 table_name@schema_b 的副本
这是我到目前为止的地方,但似乎效果不佳......
create or replace
PROCEDURE transfer_table
(
@pTableName NVARCHAR(128)
)
IS
BEGIN
execute immediate
'DROP TABLE '|| pTableName;
execute immediate
'CREATE TABLE '||pTableName|| ' AS SELECT * FROM ' || pTableName || '@SCHEMA_B';
END;
对我做事方式的任何帮助和任何优化都将不胜感激。真正的目标是将表从模式 B 复制到模式 A,作为一个过程
更新的代码 - 仍然无法正确编译:
create or replace
PROCEDURE transfer_table
(
table_name VARCHAR2(30)
)
IS
BEGIN
BEGIN
execute immediate
'DROP TABLE '|| table_name;
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
end;
END;
EXECUTE IMMEDIATE
'CREATE TABLE '||table_name|| ' AS SELECT * FROM ' || table_name || '@SCHEMA_B';
END;
/
【问题讨论】:
-
你已经使用oracle 进行了标记,但你编写的似乎是 PL/SQL 和 T-SQL 的混合体
-
@Sathya - 那我真的迷路了。这是甲骨文的,我一直在网上搜索,可能拿错了……
标签: oracle stored-procedures plsql