如何在 SQLPlus 中运行 PL/SQL 代码?

Posted

技术标签:

【中文标题】如何在 SQLPlus 中运行 PL/SQL 代码?【英文标题】:How do I run PL/SQL code within SQLPlus? 【发布时间】:2009-08-20 13:02:30 【问题描述】:

我正在尝试在 SQLPlus 中运行以下代码:

exec lbacsys.sa_sysdba.create_policy(policy_name => 'ACCESS_LOCATIONS',
                                      column_name => 'OLS_COLUMN',
                                      default_options => 'READ_CONTROL,INSERT_CONTROL,UPDATE_CONTROL,DELETE_CONTROL,LABEL_DEFAULT,LABEL_UPDATE,CHECK_CONTROL,');

但是,我收到以下错误:

BEGIN lbacsys.sa_sysdba.create_policy(policy_name => 'ACCESS_LOCATIONS',; END;

                                                                        *
ERROR at line 1:
ORA-06550: line 1, column 78:
PLS-00103: Encountered the symbol ";" when expecting one of the following:
( - + case mod new not null <an identifier>
<a double-quoted delimited-identifier> <a bind variable>
continue avg count current exists max min prior sql stddev
sum variance execute forall merge time timestamp interval
date <a string literal with character set specification>
<a number> <a single-quoted SQL string> pipe
<an alternatively-quoted string literal with character set specification>
<an alternatively

在我看来,我在语法上做错了。我只是不确定它是什么。任何帮助,将不胜感激。谢谢:)

【问题讨论】:

【参考方案1】:

EXEC 语句获取一行代码并将其包装在 BEGIN/END 块中。在这种情况下,您希望将调用拆分为几行代码,因此您可能会发现自己添加 BEGIN/END 会更容易:

BEGIN
  lbacsys.sa_sysdba.create_policy(policy_name => 'ACCESS_LOCATIONS',
                                  column_name => 'OLS_COLUMN',
                                  default_options =>
       'READ_CONTROL,INSERT_CONTROL,'
    || 'UPDATE_CONTROL,DELETE_CONTROL,'
    || 'LABEL_DEFAULT,LABEL_UPDATE,CHECK_CONTROL,');
END;
/

【讨论】:

以上是关于如何在 SQLPlus 中运行 PL/SQL 代码?的主要内容,如果未能解决你的问题,请参考以下文章

在 linux 中使用 sqlplus 部署 pl sql .sql 脚本

在PL/SQL/sqlplus客户端 中如何让程序暂停几秒钟

如何从 pl sql 过程运行 sql 脚本

sqlplus执行sql文件出错后继续

如何从选择查询向 PL/SQL 循环提供值

ORACLE 在 SQLPLUS 与 PL/SQL 中显示乱码的问题