繁体   English   中英

从另一个模式复制表不能动态工作

[英]Copy table from another schema doesn't work dynamically

我正在尝试使用以下方法将表(模式+数据)从一个模式复制到另一个模式: create table as select * from my_table

我想从某个表列表做,所以我写了一个cursor

DECLARE
   p_site nvarchar2(200);
   v_cmd nvarchar2(1000);
   v_tablename nvarchar2(100);

  CURSOR export_running IS
  SELECT  tablename  FROM TABLES_TABLE;
BEGIN
  p_site:='site_name';
  OPEN export_running;
  LOOP
    FETCH  export_running  INTO v_tablename;
    EXIT WHEN export_running%NOTFOUND;
     
     v_cmd:='create table '||v_tablename||' as select * from '||p_site||'.'||v_tablename;
     execute immediate v_cmd;
  END LOOP;
  CLOSE export_running;
END;

当我运行我得到的代码时

PLS-00382: expression is of wrong type
ORA-06550: line 20, column 6:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"

但是,如果我打印该语句并运行它,它运行良好。

  • 数据泵在这里不是一个选项。
  • 我在 SQL 开发人员,Oracle 版本 12.1 上执行此操作。
  • 我对这两种模式都拥有完全权限。

我无法动态创建从一个模式到另一个模式的表是一个已知问题吗? 有什么建议吗?

谢谢!

不要使用NVARCHAR2数据类型。 文档中:

execute_immediate_statement

dynamic_sql_stmt

表示 SQL 语句的字符串文字、字符串变量或字符串表达式。 它的类型必须是 CHAR、VARCHAR2 或 CLOB。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM