簡體   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