Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle中的存储过程_Sql_Oracle_Stored Procedures - Fatal编程技术网

Sql oracle中的存储过程

Sql oracle中的存储过程,sql,oracle,stored-procedures,Sql,Oracle,Stored Procedures,我不熟悉存储过程。请提供我帮助。稍后我会写我自己,我在这里只写了很少的逻辑。我有两个表Call\u Match和Subs\u Info。列和数据类型信息如下所示 我必须编写一个存储过程,逻辑应该是: SP输入:号码->呼叫号码 SP输出:varchar->ReturnString(逗号分隔) SP输出:编号->错误代码 逻辑:callNumber模式将对照Call_Match表列TextPattern进行检查。如果它匹配callNumber相等,将根据SUB\u INFO表CALL\u NO列

我不熟悉存储过程。请提供我帮助。稍后我会写我自己,我在这里只写了很少的逻辑。我有两个表
Call\u Match
Subs\u Info
。列和数据类型信息如下所示

我必须编写一个存储过程,逻辑应该是:

  • SP输入:号码->呼叫号码
  • SP输出:varchar->ReturnString(逗号分隔)
  • SP输出:编号->错误代码

  • 逻辑:callNumber模式将对照Call_Match表列TextPattern进行检查。如果它匹配callNumber相等,将根据SUB\u INFO表CALL\u NO列进行检查。在返回字符串中,所有值都应以逗号分隔

  • 返回:DRR,无时间,CFU,NRC

表:
Call\u Match

栏目:

  • TextPattern(varchar2):0112
  • DRR(编号):5
  • 无时间(编号):1
表:
SUBS\u INFO

栏目:

  • 电话号码(varchar2):011213
  • CFU(数量):1
  • NRC(编号):3

    • 如果有什么遗漏,请告诉我,它仍然需要处理错误

      Create or replace PROCEDURE EXECUTE_DATA 
      ( CALL_NUMBER IN VARCHAR2, RETURN_RESULT OUT VARCHAR2, ERROR_CODE OUT INTEGER )
       AS
       VAR_DRR NUMBER(3);
      VAR_NO_TIME NUMBER(3) ;
      VAR_CFU NUMBER(3);
      VAR_NRC NUMBER(3);
      CNT NUMBER(3);
      CNT1 NUMBER(3);
       BEGIN 
      -- check if there are values equale to call number;
      SELECT COUNT(1) INTO CNT FROM CALL_MATCH WHERE TEXTPATTERN =CALL_NUMBER;
      IF CNT >0 THEN
      SELECT COUNT(1) INTO CNT1 FROM SUBS_INFO WHERE CALL_NO =CALL_NUMBER;
      end if;
      -- check if there are values in the another table;
      IF CNT1 >0 THEN
      SELECT CALL_MATCH.DRR ,CALL_MATCH.NO_TIME ,SUBS_INFO.CFU ,SUBS_INFO.NRC 
      INTO VAR_DRR ,VAR_NO_TIME , VAR_CFU,VAR_NRC
      FROM CALL_MATCH,SUBS_INFO WHERE 
      CALL_MATCH.TEXTPATTERN =CALL_NUMBER
       and SUBS_INFO.CALL_NO =CALL_NUMBER; -- its better to have a kind of checking, this is example
      
      -- the returning result that you want
      RETURN_RESULT:= VAR_DRR||','||VAR_NO_TIME||','||VAR_CFU||','||VAR_NRC;
      ELSE 
      RETURN_RESULT :=NULL;
      
      end if;
      end;
      /
      

      请帮助任何人。如果问题不清楚,请让我知道。这是家庭作业吗?你试过做什么吗?@Moudiz:我试过一点。创建或替换过程执行\u数据(调用VARCHAR2中的\u编号,返回\u结果输出VARCHAR2,错误\u代码输出整数),作为开始打开游标\u,用于SELECT*FROM CALL\u匹配,其中文本模式如CALL\u编号%;结束;但由于我是新手,所以无法写作和思考。我必须写这么多逻辑。如果你能帮我,我可以自己做,给点时间:)谢谢。让我查一查,我会回复你的@Moudiz:谢谢,它奏效了。正如您提到的,您没有使用游标。为什么我们需要在这里使用游标。