【问题标题】:Using Variable- Oracle使用变量——Oracle
【发布时间】:2017-01-22 08:21:52
【问题描述】:

在上面的代码中,我将 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:

任何人都可以建议如何使用 spool 使其工作

【问题讨论】:

    标签: oracle function stored-procedures plsqldeveloper


    【解决方案1】:

    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。你到底想达到什么目标?

    【讨论】:

    • 假脱机将默认为C:\ABC.LST,因为没有给出后缀; @ 将默认为 C:\ABC.SQL。所以它们不是同一个文件。我希望至少看到完整的线轴名称,以避免混淆......
    【解决方案2】:

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

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

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

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

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

    connect :schemaname
    

    将提示输入密码(即使您将其值定义为 user/passwd)并尝试以直译为 :schemaname 的用户身份连接。

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

    connect &1
    

    (不带引号)

    【讨论】:

      猜你喜欢
      • 2011-06-29
      • 2023-03-17
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多