oracle PL/SQL中如何将格式化字符串传递给列并在包中提取

zdwk9cvp  于 2022-12-26  发布在  Oracle
关注(0)|答案(1)|浏览(131)

我有一个错误主表,其中包含类似“xyz列中表abc中的错误”的描述。我需要为列名设置字符串格式,此处为xyz。无论何时需要调用此表,我都会传递列名,然后将获得预期的描述。例如-Insert into errorTabl values(01,There is error in {0})无论何时在包内需要检索01的值,我都会传递列名col 1因此,预期值如下:01第1列有错误
请您帮助我插入并选择这两个语句。

ss2ws0br

ss2ws0br1#

虽然这没有意义,但下面的代码可能会帮助您从某个方面入手或澄清您的问题。
注意:下面的代码只是向你展示一些基本的东西--它对任何一种产品都没有意义。你是那个根据你的环境来调整它的人。
因此,将内容放入错误表或从错误表获取内容的包:

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
*/

相关问题