从plsq命令执行复制

时间:2013-07-09 10:11:13

标签: oracle plsql oracle10g

如何在plsql块中执行命令复制?

E.g。我有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

如何解决此问题

3 个答案:

答案 0 :(得分:2)

COPY是一个SQL * Plus命令。所以它只适用于SQL * Plus客户端。 Find out more.

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

显然,这只是对你的程序实际行为的猜测,但我希望你能理解这个原则。

答案 1 :(得分:0)

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

begin
  insert into emp1 select * from emp;
end;

emp1是目标表 emp是源表

答案 2 :(得分: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提示符下执行     从emp1中选择count(1);

2)使用数据从现有表创建结构

-在sql提示符下执行     开始       立即执行“创建表emp1作为select * from emp”;     结束;

-在sql提示符下执行

select count(1) from emp1;