create or replace  procedure PTR_add_check (
 mid varchar2 (50)
,UserID varchar2 (50)
,code   varchar2 (50)
,Barcode varchar2 (50)
,Msg  out  varchar2 (100)) as
  Qty number,
  name varchar2 (50),
  Package varchar2 (50)
begin
    select name,Package into name,Package from "SYSTEM"."pt_wh_goods" where Barcode=Barcode
    if SQL%rowcount =0
    begin
         Msg := '条码(' + ltrim(rtrim(Barcode)) + ')不存在!'
         DBMS_OUTPUT.put_line(Msg);
       
    end
    
    select qty:=isnull(order_qty,0) from "SYSTEM"."pt_wh_add_items" where order_code=code and barcode=barcode
    begin
    if SQL%rowcount =0 then 
     qty:=0
     Msg :=name+'('+Package+')' + ' 已下补货数量:' + cast(qty as varchar2(20))
     DBMS_OUTPUT.put_line(Msg);
     
    end
    
end;

解决方案 »

  1.   

    就这么扔出来一个PRC,报错信息呢?
    表结构呢? 调用参数呢?业务逻辑也不说明一下?
      

  2.   

    行号= 2 列号= 15 错误文本= PLS-00103: 出现符号 "("在需要下列之一时:  := . ) , @ % default    character 符号 ":=" 被替换为 "(" 后继续。 
    行号= 3 列号= 18 错误文本= PLS-00103: 出现符号 "("在需要下列之一时:  := . ) , @ % default    character 符号 ":=" 被替换为 "(" 后继续。 
    行号= 4 列号= 18 错误文本= PLS-00103: 出现符号 "("在需要下列之一时:  := . ) , @ % default    character 符号 ":=" 被替换为 "(" 后继续。 
    行号= 5 列号= 19 错误文本= PLS-00103: 出现符号 "("在需要下列之一时:  := . ) , @ % default    character 符号 ":=" 被替换为 "(" 后继续。 
    行号= 6 列号= 21 错误文本= PLS-00103: 出现符号 "("在需要下列之一时:  := . ) , @ % default    character 符号 ":=" 被替换为 "(" 后继续。 
    行号= 9 列号= 13 错误文本= PLS-00103: 出现符号 ","在需要下列之一时:  := . ( @ % ; not null range    default character 
      

  3.   

      Qty number,
    这行报:行号= 9 列号= 13 错误文本= PLS-00103: 出现符号 ","在需要下列之一时: := . ( @ % ; not null range default character  这里出现了什么问题呢
     
      

  4.   

    这几行,都应该是以分号结尾啊:
      Qty number,
      name varchar2 (50),
      Package varchar2 (50)
    -->
      Qty number;
      name varchar2 (50);
      Package varchar2 (50);
    并且其他行,行结束符也是分号啊。
      

  5.   

      Qty number;
      name varchar2 (50);
      Package varchar2 (50);
    beginPackage varchar2 (50);
    这里报行号= 11 列号= 20 错误文本= PLS-00103: 出现符号 "("在需要下列之一时:  is authid as 
      

  6.   

    哎,要把mssql的存储过程导入到oracle中,oracle有没学过,痛苦呀!
      

  7.   

    create or replace procedure PTR_add_check (
     mid VARCHAR2,
     UserID VARCHAR2,
     code VARCHAR2,
     Barcode VARCHAR2,
     Msg out VARCHAR2) AS
      Qty NUMBER;
      v_name VARCHAR2(50);
      v_package VARCHAR2(50);
    BEGIN 
      SELECT name,Package INTO v_name,v_package FROM "SYSTEM"."pt_wh_goods" WHERE Barcode=Barcode;
      IF SQL%rowcount = 0 THEN
        Msg := '条码(' + ltrim(rtrim(Barcode)) + ')不存在!';
        DBMS_OUTPUT.put_line(Msg); 
      END IF;
        
      SELECT isnull(order_qty,0) INTO Qty FROM "SYSTEM"."pt_wh_add_items" WHERE order_code=code AND barcode=barcode;
      IF SQL%rowcount = 0 THEN   
        qty := 0;
        Msg := name+'('+Package+')' + ' 已下补货数量:' + qty;
        DBMS_OUTPUT.put_line(Msg);
      END IF;
        
    end;SQL语句自己去调吧 我没有表!
      

  8.   

    首先谢谢cocolmalu
    按照你的方法编译通过了。这是sql2000的存储过程;
    create procedure dbo.PTR_add_check (@mid VARCHAR(50)
             ,@UserID VARCHAR(50)
                            ,@code   VARCHAR(50)
                            ,@Barcode VARCHAR(50)
                            ,@Msg   VARCHAR(100) output) as
     declare @Qty int
     declare @name varchar(50),@Package varchar(50)   select @name=[name],@Package=Package from pt_wh_goods where Barcode=@Barcode
        if @@rowcount =0
        begin
            set @Msg = '条码(' + ltrim(rtrim(@Barcode)) + ')不存在!'
            return -1
        end   select @qty=isnull(order_qty,0) from pt_wh_add_items where order_code=@code and barcode=@barcode
       
       if @@rowcount =0 set @qty=0    set @Msg =@name+'('+@Package+')' + ' 已下补货数量:' + cast(@qty as varchar(20))
        RETURN 0这个是转成oracle的存储过程:CREATE OR REPLACE  PROCEDURE "SYSTEM"."PTR_ADD_CHECK" (
     mid varchar2
    ,UserID varchar2
    ,code   varchar2
    ,Barcode varchar2
    ,Msg  out  varchar2 )
     as
      Qty number;
      name varchar2 (50);
      Package1 varchar2 (50);  begin
        select name,BARCODE into name,Package1 from "SYSTEM"."pt_wh_goods" where BARCODE=Barcode;
        if SQL%rowcount =0 then
      
             Msg := '条码(' + ltrim(rtrim(Barcode)) + ')不存在!';
             DBMS_OUTPUT.put_line(Msg);    end if ;
      
     
        select NVL(order_qty,0) into qty from "SYSTEM"."pt_wh_add_items" where ORDER_CODE =code and BARCODE=barcode;
        
        IF SQL%rowcount =0 THEN
         qty:=0;
         Msg :=name+'('+Package1+')' + ' 已下补货数量:' + qty ;
         DBMS_OUTPUT.put_line(Msg);
        END IF;
      end;请问在oracle中 return -1
    用什么来代替呢?
      

  9.   


    直接return 就可以了,跳出整个存储过程。