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:谢谢,它奏效了。正如您提到的,您没有使用游标。为什么我们需要在这里使用游标。