0

如何从 plsql 块内的命令执行复制?

例如我有copy from test/test@test insert emp using select * from emp;

如何在 plsql 块中调用它?我试过了

execute immediate 'copy from test/test@test insert emp using select * from emp';

但是,当我执行具有 plsql 块的脚本时

ORA-00900: invalid SQL statement

我该如何解决这个问题

4

3 回答 3

2

COPY 是一个 SQL*Plus 命令。所以它只适用于 SQL*Plus 客户端。 了解更多。

EXECUTE IMMEDIATE 是运行动态调用的 PL/SQL 命令,它只识别 SQL 和 PL/SQL。

“我正在从 sqlplus 执行 sqlscript”

是的,但是您在匿名块中调用 COPY,因此它具有 PL/SQL 范围;这意味着仅 PL/SQL 和 SQL。

执行此操作的方法是使用 shell 脚本。这些是依赖于操作系统的,但是这样的东西可以在 Linux 环境中运行。

#!/bin/bash

echo Please enter local Username:
read USERNAME

echo "Please enter local Password:"
read -s PASS   

SID=${ORACLE_SID}

if [ "${ORACLE_SID}" != 'TEST'  ]
then
    sqlplus -s -l $USERNAME/$PASS@$SID  << EOF
    copy from test/test@test insert emp using select * from emp
    exit
EOF

else
    echo  "Can't copy from TEST to TEST"
fi

显然这只是对你的程序实际做了什么的一个疯狂的猜测,但我希望你能理解其中的原理。

于 2013-07-09T10:17:57.120 回答
0

在 plsql 代码中,如果我们直接使用以下命令,将提供类似的输出

begin
  insert into emp1 select * from emp;
end;

emp1 是目标表 emp 是源表

于 2019-09-07T05:00:19.163 回答
0

有类似的问题想在哪里创建空白结构或带有数据的结构以备份活动。参考链接https://oracle-concepts-learning.blogspot.com/2019/09/copy-table-structure-or-data .html

1) 从现有表中创建空白结构

--在sql提示符下执行

begin
  execute immediate 'create table emp1 as select * from emp where 1=2';
end;

--在sql提示符下执行 select count(1) from emp1;

2)从现有表中创建结构与数据

-- 在 sql 提示下执行 begin execute immediate 'create table emp1 as select * from emp'; 结尾;

--在sql提示符下执行

select count(1) from emp1;
于 2019-09-07T05:30:41.670 回答