使用变量-Oracle

使用变量-Oracle,oracle,function,stored-procedures,plsqldeveloper,Oracle,Function,Stored Procedures,Plsqldeveloper,在上面的代码中,我将schemaname作为输入,并使用该输入连接到数据库。但是在本例中,我输入的值不是由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

在上面的代码中,我将schemaname作为输入,并使用该输入连接到数据库。但是在本例中,我输入的值不是由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:
声明schemaname varchar2(20);
exec:schemaname:=XYZ;
开始
结束;
错误报告-
ORA-06550:第2行第6列:
PLS-00103:在预期以下情况时遇到符号“”:
恒定异常
表长双参考
字符时间戳间隔日期二进制国家字符
固定长度
ORA-06550:第4行第1列:
PLS-00103:在预期以下情况时遇到符号“连接”:

有人能建议如何使用spool使其工作吗在
declare
end
之间的代码是PL/SQL。像
CONNECT
SPOOL
这样的命令是SQL*Plus命令。不能在PL/SQL块中使用SQL*Plus命令

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

创建包含以下内容的脚本

connect &1
spool C:\ABC
@c:\ABC
spool off;
然后运行它

@your_script_name

顺便说一句:在后台运行脚本c:\ABC时,没有理由运行它。你到底想实现什么?

declare
end
之间的代码是PL/SQL。像
CONNECT
SPOOL
这样的命令是SQL*Plus命令。不能在PL/SQL块中使用SQL*Plus命令

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

创建包含以下内容的脚本

connect &1
spool C:\ABC
@c:\ABC
spool off;
然后运行它

@your_script_name
顺便说一句:在后台运行脚本c:\ABC时,没有理由运行它。您到底想要实现什么?

是SQL*Plus和SQL Developer(可能还有其他客户机)对匿名块的简写。它是一个客户机命令,不是PL/SQL的一部分。您正试图在PL/SQL声明部分中使用它,该部分无效或无法识别

如果需要客户端绑定变量,则需要:

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

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

connect :schemaname
将提示输入密码(即使您将其值定义为
user/passwd
),并尝试以用户身份进行连接,该用户被称为
:schemaname

可以使用替换变量,但实际上不需要定义新变量;由于您似乎正在传递凭据,您可以执行以下操作:

connect &1
(不带引号)

是SQL*Plus和SQL Developer(可能还有其他客户端)对匿名块的缩写。它是一个客户机命令,不是PL/SQL的一部分。您正试图在PL/SQL声明部分中使用它,该部分无效或无法识别

如果需要客户端绑定变量,则需要:

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

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

connect :schemaname
将提示输入密码(即使您将其值定义为
user/passwd
),并尝试以用户身份进行连接,该用户被称为
:schemaname

可以使用替换变量,但实际上不需要定义新变量;由于您似乎正在传递凭据,您可以执行以下操作:

connect &1

(不带引号)

由于未给出后缀,假脱机将默认为
C:\ABC.LST
@
将默认为
C:\ABC.SQL
。所以它们不是同一个文件。我希望看到至少完整的spool名称,以避免混淆…spool将默认为
C:\ABC.LST
,因为没有给出后缀;
@
将默认为
C:\ABC.SQL
。所以它们不是同一个文件。我希望看到至少完整的假脱机名称,以避免混淆。。。