如何在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
如何解决此问题
答案 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;