使用可变 Oracle

Using Variable- Oracle

在上面的代码中,我将 schemaname 作为输入并使用该输入连接到数据库。但在这种情况下,我输入的值未被架构名称采用。输出和错误是这样的:

declare schemaname varchar2(20);
exec :schemaname := XYZ;
BEGIN

end;

Error report -
ORA-06550: line 2, column 6:
PLS-00103: Encountered the symbol "" when expecting one of the following:

   constant exception <an identifier>
   <a double-quoted delimited-identifier> table long double ref
   char time timestamp interval date binary national character
   nchar
ORA-06550: line 4, column 1:
PLS-00103: Encountered the symbol "CONNECT" when expecting one of the following:

任何人都可以建议如何使用假脱机使其工作

declareend之间的代码是PL/SQL。 CONNECTSPOOL 等命令是 SQL*Plus 命令。您不能在 PL/SQL 块中使用 SQL*Plus 命令。

在你的情况下,你根本不需要 PL/SQL:

创建包含以下内容的脚本

connect &1
spool C:\ABC
@c:\ABC
spool off;

和运行它

@your_script_name

顺便说一句:当您假脱机进入 c:\ABC 时,没有理由 运行 编写脚本。你到底想达到什么目的?

exec[ute] 是 SQL*Plus 和 SQL 开发人员(可能还有其他客户)shorthand 用于匿名块。它是一个 client 命令,它不是 PL/SQL 的一部分。您正试图在 PL/SQL 声明部分中使用它,但它无效或无法识别。

如果你想要一个客户端绑定变量,你需要 var[iable] command:

var schemaname varchar2(20);
exec :schemaname := '&1';

BEGIN
...

注意 &1 周围的单引号,因为它被分配给一个字符串变量。

但是您也不能在 PL/SQL 块内连接,也不能使用绑定变量进行连接。

connect :schemaname

将提示输入密码(即使您将其值定义为 user/passwd)并尝试以名为 :schemaname.

的用户身份进行连接

你可以使用替换变量,但你真的不需要定义一个新的;正如您似乎正在传递凭据一样,您可以这样做:

connect &1

(不带引号)