各位好,麻烦帮忙看看这个sqlserver下是这样写:------------------------------------
--用途:数据库记录是否已经存在
------------------------------------
CREATE PROCEDURE SYSTEMCODE_Exists
@Code_ID int
AS
        DECLARE @TempID int
        SELECT @TempID = count(1) FROM SYSTEMCODE WHERE Code_ID = @Code_ID
        IF @TempID = 0
                RETURN 0
        ELSE
                RETURN 1
go我在Oracle这样写就报错CREATE OR REPLACE  PROCEDURE SYSTEMCODE_EXISTS (
CODELB_in VARCHAR2
)
AS
TempID Number;
BEGIN
SELECT count(1) into TempID  FROM SYSTEMCODE
  WHERE CODELB = CODELB_in;
  
IF TempID = 0 then
  RETURN 0;
ELSE
  RETURN 1;
end IF;
END;编译错误:
行号= 11 列号= 3 错误文本= PLS-00372: 在一个过程中, RETURN 语句无法包含表达式
行号= 11 列号= 3 错误文本= PL/SQL: Statement ignored
行号= 13 列号= 3 错误文本= PLS-00372: 在一个过程中, RETURN 语句无法包含表达式
行号= 13 列号= 3 错误文本= PL/SQL: Statement ignored

解决方案 »

  1.   

    CREATE OR REPLACE  PROCEDURE SYSTEMCODE_EXISTS (
    CODELB_in VARCHAR2,
    count_row out number(2)
    )
    AS
    TempID Number;
    BEGIN
    SELECT count(1) into TempID  FROM SYSTEMCODE
      WHERE CODELB = CODELB_in;
      
    IF TempID = 0 then
      count_row := 0;
    ELSE
      count_row := 1;
    end IF;
    END;oracle中可以定义一个out参数返回
      

  2.   

    同意楼上,oracle中的return虽然是关键字,但它仅仅表示return,不具有返回值的功能。
      

  3.   

    可以写成函数试试CREATE OR REPLACE  FUNCTION SYSTEMCODE_EXISTS (
    CODELB_in VARCHAR2
    )
    RETURN NUMBER
    AS
    TempID Number;
    RETURN 
    BEGIN
    SELECT count(1) into TempID  FROM SYSTEMCODE
      WHERE CODELB = CODELB_in;
      
    IF TempID = 0 then
      RETURN 0;
    ELSE
      RETURN 1;
    end IF;
    END;
      

  4.   

    其实可以直接在存储过程中写查询语句,写完直接返回,调用者调用后直接判断sqlca.sqlcode是否=100就行了
      

  5.   

    这样的需求写函数比较合适。如果单独仅判断一个表,没必要写过程。select case when count(1) > 0 then 1 else 0 end from SYSTEMCODE WHERE CODELB = CODELB_in;
      

  6.   

    我觉得写成function更好CREATE OR REPLACE FUNCTION SYSTEMCODE_EXISTS(CODELB_in VARCHAR2) RETURN Number
    AS
        TempID Number;
    BEGIN
        SELECT count(*) into TempID FROM SYSTEMCODE WHERE CODELB = CODELB_in;    IF TempID = 0 then
            RETURN 0;
        ELSE
            RETURN 1;
        end IF;
    END;
      

  7.   

    CREATE OR REPLACE  PROCEDURE SYSTEMCODE_EXISTS (
    CODELB_in VARCHAR2,
    count_row out number
    )
    AS
    TempID Number(2);
    BEGIN
    SELECT count(1) into TempID  FROM SYSTEMCODE
      WHERE CODELB = CODELB_in;
     
    IF TempID = 0 then
      count_row := 0;
    ELSE
      count_row := 1;
    end IF;
    END;
    你在试试,当然写成函数也是可以的
      

  8.   


    不好意思,
    你把定义的那个count_row out number(2)改成count_row out number应该就可以了
      

  9.   

    感谢楼主各位,麻烦你们了
    我在c#页面调用时候,出错了,应该怎么才是正确的了,实在不好意思,我太菜鸟了,向各位大师学习!
            //是否已经存在
            public bool Exists(string CodeLb, string CodeValue)
            {
                System.Data.Common.DbCommand sqlCommand = db.GetStoredProcCommand("SYSTEMCODE_EXISTS");
                db.AddInParameter(sqlCommand, "CodeLb_in", DbType.String, CodeLb);
                db.AddInParameter(sqlCommand, "CodeValue_in", DbType.String, CodeValue);
                db.AddOutParameter(sqlCommand, "count_row", DbType.String, 40);            IDataReader dr = db.ExecuteReader(sqlCommand);            string result = null;
                if (dr.Read())
                {
                    result = dr["TempID"].ToString();
                }
                dr.Close();
                dr.Dispose();            if (string.IsNullOrEmpty(result))
                    return false;
                else
                    return true;
            }ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'SYSTEMCODE_EXISTS' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OracleClient.OracleException: ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'SYSTEMCODE_EXISTS' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
      

  10.   

    在Oracle中编译通过啊,我是在前台程序中调用时候出错,问题在于我对c#调用Oracle存储过程的不熟悉,我引用的是微软企业库[code=HTML]<html>
        <head>
            <title>ORA-06550: 第 1 行, 第 7 列: <br>PLS-00306: 调用 'SYSTEMCODE_EXISTS' 时参数个数或类型错误<br>ORA-06550: 第 1 行, 第 7 列: <br>PL/SQL: Statement ignored<br></title>
            <style>
             body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;} 
             p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
             b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
             H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
             H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
             pre {font-family:"Lucida Console";font-size: .9em}
             .er {font-weight: bold; color: black;text-decoration: none;}
             .version {color: gray;}
             .error {margin-bottom: 10px;}
             .expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
            </style>
        </head>    <body bgcolor="white">            <span><H1>“/FTWeb”应用程序中的服务器错误。<hr width=100% size=1 color=silver></H1>            <h2> <i>ORA-06550: 第 1 行, 第 7 列: <br>PLS-00306: 调用 'SYSTEMCODE_EXISTS' 时参数个数或类型错误<br>ORA-06550: 第 1 行, 第 7 列: <br>PL/SQL: Statement ignored<br></i> </h2></span>            <font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">            <b> 说明: </b>执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。            <br><br>            <b> 异常详细信息: </b>System.Data.OracleClient.OracleException: ORA-06550: 第 1 行, 第 7 列: <br>PLS-00306: 调用 'SYSTEMCODE_EXISTS' 时参数个数或类型错误<br>ORA-06550: 第 1 行, 第 7 列: <br>PL/SQL: Statement ignored<br><br><br>            <b>源错误:</b> <br><br>            <table width=100% bgcolor="#ffffcc">
                   <tr>
                      <td>
                          <code><pre>行 112:            db.AddOutParameter(sqlCommand, &quot;count_row&quot;, DbType.String, 40);
    行 113:
    <font color=red>行 114:            IDataReader dr = db.ExecuteReader(sqlCommand);
    </font>行 115:
    行 116:            string result = null;</pre></code>                  </td>
                   </tr>
                </table>            <br>            <b> 源文件: </b> E:\www\FFT\DAL\SystemManage\SystemCodeDAL.cs<b> &nbsp;&nbsp; 行: </b> 114
                <br><br>            <b>堆栈跟踪:</b> <br><br>            <table width=100% bgcolor="#ffffcc">
                   <tr>
                      <td>
                          <code><pre>[OracleException (0x80131938): ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'SYSTEMCODE_EXISTS' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
    ]
       System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc) +203
       System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor&amp; rowidDescriptor, ArrayList&amp; resultParameterOrdinals) +1018
       System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, ArrayList&amp; resultParameterOrdinals) +25
       System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behavior) +142
       System.Data.OracleClient.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior) +4
       System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +7
       Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteReader(DbCommand command, CommandBehavior cmdBehavior) +199
       Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteReader(DbCommand command) +113
       Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleDatabase.ExecuteReader(DbCommand command) +74
       FTWeb.DAL.SystemManage.SystemCodeDAL.Exists(String CodeLb, String CodeValue) in E:\www\FFT\DAL\SystemManage\SystemCodeDAL.cs:114
       FTWeb.BLL.SystemManage.SystemCodeBLL.Add(SystemCodeModel Model) in E:\www\FFT\BLL\SystemManage\SystemCodeBLL.cs:21
       SystemManage_SystemCodeAdd.btn_OK_Click(Object sender, ImageClickEventArgs e) in e:\www\FFT\FTWeb\SystemManage\SystemCodeAdd.aspx.cs:55
       System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +105
       System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +115
       System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102
    </pre></code>                  </td>
                   </tr>
                </table>            <br>            <hr width=100% size=1 color=silver>            <b>版本信息:</b>&nbsp;Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42            </font>    </body>
    </html>
    code]
      

  11.   


    “/FastTraceWeb”应用程序中的服务器错误。
    --------------------------------------------------------------------------------ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'SYSTEMCODE_EXISTS' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.OracleClient.OracleException: ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'SYSTEMCODE_EXISTS' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
    源错误: 
    行 112:            db.AddOutParameter(sqlCommand, "count_row", DbType.String, 40);
    行 113:
    行 114:            IDataReader dr = db.ExecuteReader(sqlCommand);
    行 115:
    行 116:            string result = null;
     源文件: E:\www\FastTrace\DAL\SystemManage\SystemCodeDAL.cs    行: 114 堆栈跟踪: 
    [OracleException (0x80131938): ORA-06550: 第 1 行, 第 7 列: 
    PLS-00306: 调用 'SYSTEMCODE_EXISTS' 时参数个数或类型错误
    ORA-06550: 第 1 行, 第 7 列: 
    PL/SQL: Statement ignored
    ]
       System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle, Int32 rc) +203
       System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, Boolean needRowid, OciRowidDescriptor& rowidDescriptor, ArrayList& resultParameterOrdinals) +1018
       System.Data.OracleClient.OracleCommand.Execute(OciStatementHandle statementHandle, CommandBehavior behavior, ArrayList& resultParameterOrdinals) +25
       System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behavior) +142
       System.Data.OracleClient.OracleCommand.ExecuteDbDataReader(CommandBehavior behavior) +4
       System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +7
       Microsoft.Practices.EnterpriseLibrary.Data.Database.DoExecuteReader(DbCommand command, CommandBehavior cmdBehavior) +199
       Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteReader(DbCommand command) +113
       Microsoft.Practices.EnterpriseLibrary.Data.Oracle.OracleDatabase.ExecuteReader(DbCommand command) +74
       FastTraceWeb.DAL.SystemManage.SystemCodeDAL.Exists(String CodeLb, String CodeValue) in E:\www\FastTrace\DAL\SystemManage\SystemCodeDAL.cs:114
       FastTraceWeb.BLL.SystemManage.SystemCodeBLL.Add(SystemCodeModel Model) in E:\www\FastTrace\BLL\SystemManage\SystemCodeBLL.cs:21
       SystemManage_SystemCodeAdd.btn_OK_Click(Object sender, ImageClickEventArgs e) in e:\www\FastTrace\FastTraceWeb\SystemManage\SystemCodeAdd.aspx.cs:55
       System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +105
       System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +115
       System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102 
    --------------------------------------------------------------------------------
    版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42 
      

  12.   

    csdn不给编辑权限啊,发错了,还得重新发,辛苦各位了