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