我有一个错误主表,其中包含类似“xyz列中表abc中的错误”的描述。我需要为列名设置字符串格式,此处为xyz。无论何时需要调用此表,我都会传递列名,然后将获得预期的描述。例如-Insert into errorTabl values(01,There is error in {0})无论何时在包内需要检索01的值,我都会传递列名col 1因此,预期值如下:01第1列有错误 请您帮助我插入并选择这两个语句。
CREATE OR REPLACE PACKAGE ERRS AS
Procedure putError(p_table IN VarChar2, p_column IN VarChar2);
Function getError(p_table VarChar2, p_column VarChar2) RETURN VarChar2;
END ERRS;
-- ---------------------------------------------------------------------------------
CREATE OR REPLACE PACKAGE BODY ERRS AS
Procedure putError(p_table IN VarChar2, p_column IN VarChar2) AS
BEGIN
Declare
mSql VarChar2(512) := '';
sq VarChar2(1) := '''';
Begin
mSql := 'Insert Into ERRORTABLE values( ' || sq || '01' || sq || ', ' || sq ||
'There is error in table ' || p_table || ' in ' || p_column || ' column' || sq || ')';
Execute Immediate mSql;
Commit;
End;
END putError;
-- -------------------------------------------------------------------------------
Function getError(p_table VarChar2, p_column VarChar2) RETURN VarChar2 IS
BEGIN
Declare
Cursor c IS
Select ERR_DESC From ERRORTABLE Where ERR_DESC Like('%table ' || p_table || ' in ' || p_column || '%');
mRet VarChar2(512) := '';
mDesc VarChar2(512) := '';
Begin
Open c;
LOOP
FETCH c into mDesc;
EXIT WHEN c%NOTFOUND;
mRet := '01 ' || mDesc || Chr(10);
END LOOP;
Close c;
RETURN RTRIM(mRet, Chr(10));
End;
END getError;
END ERRS;
现在调用代码插入5个记录(再一次-这是毫无意义的),并让您其中之一...
set serveroutput on
DECLARE
errMsg VarChar2(512);
BEGIN
ERRS.putError('T_ABC', 'C_XYZ');
ERRS.putError('T_ABC', 'C_MNO');
ERRS.putError('T_ABC', 'C_PQR');
ERRS.putError('T_DEF', 'C_MNO');
ERRS.putError('T_DEF', 'C_XYZ');
--
errMsg := ERRS.getError('T_ABC', 'C_XYZ');
dbms_output.put_line(errMsg);
END;
/* R e s u l t :
anonymous block completed
01There is error in table T_ABC in C_XYZ column
*/
1条答案
按热度按时间ss2ws0br1#
虽然这没有意义,但下面的代码可能会帮助您从某个方面入手或澄清您的问题。
注意:下面的代码只是向你展示一些基本的东西--它对任何一种产品都没有意义。你是那个根据你的环境来调整它的人。
因此,将内容放入错误表或从错误表获取内容的包:
现在调用代码插入5个记录(再一次-这是毫无意义的),并让您其中之一...