繁体   English   中英

无法在Oracle匿名块中调用并执行.sql脚本文件

[英]cant call and execute .sql script file in Oracle anonymous block

我试图运行以下匿名块但得到错误ORA-00900: invalid SQL statement 我知道在Oracle的PL / SQL块中不可能将DDL作为静态SQL发布。 由于我有超过50个需要在匿名块中执行的sql脚本,因此无法对每个sql语句发出EXECUTE IMMEDIATE 这就是为什么我创建了单独的脚本作为sql文件并尝试从我当前的匿名块调用。

  SET SERVEROUTPUT ON;
DECLARE MESSAGE VARCHAR2(100);
CHECK_VERSION VARCHAR2(100);
BEGIN
--- some code to check the version
select PROP_VAL into CHECK_VERSION from RATOR_MONITORING_CONFIGURATION.RM2_PROPERTIES WHERE PROP_NAME ='DB_VERSION';
  If CHECK_VERSION != 'V3.0' then
MESSAGE := 'Wrong Version';
-- IF(VERSION WRONG) THEN
-- MEESAGE := <<provide info for user here>>
else
@UpgradeFromV2.1ToV3.0.sql;
end if;
END;

其他

@ UpgradeFromV2.1ToV3.0.sql;

万一;

您无法直接在PL / SQL块中调用sql脚本。 你需要从外部调用它。

我建议,将sql脚本的全部内容放在PL / SQL块中。

不要在PL / SQLSQL * Plus之间混淆。

  • PL / SQL是一种服务器端语言,包括P rocedural L anguage(PL)和S tructured Q uery L anguage(SQL)。 它在Oracle服务器进程内执行。

  • SQL * Plus是一个C ommand L ine I接口(CLI)工具,它允许您将SQL和PL / SQL代码提交给Oracle服务器以供执行。

更新 OP似乎在这里提出了类似的问题。 这个问题与前一个问题有关。

您可以使用DBMS_SCHEDULER并将这些sql脚本作为相应的作业提交。

调用sql脚本取决于您的操作系统

例如,在Windows中

BEGIN  
  dbms_scheduler.create_job('MY_JOB',  
  job_action=>'C:\WINDOWS\SYSTEM32\CMD.EXE',  
  number_of_arguments=>3,  
  job_type=>'executable',  
  start_date => SYSTIMESTAMP,  
  repeat_interval => 'freq=hourly; byminute=0,30; bysecond=0;',  
  end_date => NULL,  
  enabled=> false);  
  dbms_scheduler.set_job_argument_value('MY_JOB',1,'/q');  
  dbms_scheduler.set_job_argument_value('MY_JOB',2,'/c');  
  dbms_scheduler.set_job_argument_value('MY_JOB',3,'D:\SCRIPTS\my_sql.bat');  
  dbms_scheduler.enable('MY_JOB');  
END;  
/  

现在你的my_sql.bat看起来像:

sqlplus user@sid/password @D:\scripts\script.sql  
exit 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM