首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >oracle -06550,PLS_00103

oracle -06550,PLS_00103
EN

Stack Overflow用户
提问于 2018-08-27 16:13:01
回答 1查看 693关注 0票数 0

我有一个程序定义为:

代码语言:javascript
复制
 PROCEDURE Import_Invoice 
  (     as_Directory_Name_Invoice_Data in varchar2,
        as_File_Name_Invoice_Data in varchar2,
        as_Directory_Name_Invoice_Log in varchar2,
        al_processid out number, 
        al_errnum out number,
        as_errstr out varchar2 ) IS

 begin
           al_processid := 123;
           al_errnum := 2;
           as_errstr := 'sfs';
end;

当我从shell脚本执行该过程时,如下所示:

代码语言:javascript
复制
#! /bin/ksh
::::::::::::
OUTVAL=`sqlplus -s usr/passwd@ora_instance <<EOF
264 whenever sqlerror exit failure rollback
265 set pagesize 0
266 set feed off
267 set echo off
268 set serveroutput on
269 DECLARE
270 var al_errnum number,
271 var as_errstr varchar2,
272 var al_processid number,
273 BEGIN
274 execute Import_Invoice('INVOICE_INBOUND_DAT_DIR','INVOICE_apvend_daily.dat','INVOICE_INBOUND_LOG_DIR', al_processid, al_errnum, as_errstr );
275 END
276 /
277 EOF`

::::::

OUTVAL返回如下:

代码语言:javascript
复制
OUTVAL=var al_errnum number, CAMS_INVOICE_20180802_120830.DAT INVOICE_apvend_daily.dat ERROR at line 2: ORA-06550: line 2, column 15: PLS-00103: Encountered the symbol "NUMBER" when expecting one of the following: := . ( @ % ; not null range default character

,我找不到出什么问题了。

谢谢你的建议。

更新:如@建议的那样,我将调用代码更改为:

代码语言:javascript
复制
OUTVAL=`sqlplus -s usr/passwd@ora_instance <<EOF
whenever sqlerror exit failure rollback
set pagesize 0
set feed off
set echo off
set serveroutput on
var al_errnum number
var as_errstr varchar2(1000)
var al_processid number
BEGIN
execute Import_Invoice('INVOICE_INBOUND_DAT_DIR','INVOICE_apvend_daily.dat','INVOICE_INBOUND_LOG_DIR', :al_processid, :al_errnum, :as_errstr );
END
/
EOF`

我知道这个错误:

代码语言:javascript
复制
OUTVAL=execute Import_Invoice('INVOICE_INBOUND_DAT_DIR','INVOICE_apvend_daily.dat','INVOICE_INBOUND_LOG_DIR', :al_processid, :al_errnum, :as_errstr ); CAMS_INVOICE_20180802_120830.DAT INVOICE_apvend_daily.dat ERROR at line 2: ORA-06550: line 2, column 9: PLS-00103: Encountered the symbol "IMPORT_INVOICE" when expecting one of the following: := . ( @ % ; immediate The symbol ":=" was substituted for "IMPORT_INVOICE" to continue. ORA-06550: line 3, column 3: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following: ; <an identifier> <a double-quoted delimited-identifier> The symbol ";" was substituted for "end-of-file" to continue.

请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2018-08-27 16:20:08

在脚本声明部分:

代码语言:javascript
复制
269 DECLARE
270 var al_errnum number,
271 var as_errstr varchar2,
272 var al_processid number,

应:

代码语言:javascript
复制
269 DECLARE
270  al_errnum number;
271  as_errstr varchar2;
272  al_processid number;

PL/SQL不需要var,每一行都应该以分号结尾。

这将清除错误,但您可能需要一个如下所示的脚本:

代码语言:javascript
复制
#! /bin/ksh
::::::::::::
OUTVAL=`sqlplus -s usr/passwd@ora_instance <<EOF
whenever sqlerror exit failure rollback
set pagesize 0
set feed off
set echo off
set serveroutput on
var al_errnum number
var as_errstr varchar2(20)
var al_processid number
BEGIN
Import_Invoice('INVOICE_INBOUND_DAT_DIR','INVOICE_apvend_daily.dat','INVOICE_INBOUND_LOG_DIR', :al_processid, :al_errnum, :as_errstr );
275 END
276 /
277 EOF`

::::::

声明sqlplus变量,然后将这些变量传递给您的过程。您可能会在后面的脚本中检查这些变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52043249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档