簡體   English   中英

傳遞列名作為參數

[英]Pass column name as a parameter

我需要在代碼中從前端到后端傳遞一個列名。 我正在將c#與oracle一起使用,當我將列名作為參數傳遞時,它給出了一個錯誤,這是因為列名在此處用作字符串,我需要知道如何解決此問題。 這是我的代碼,

PROCEDURE PR_GETCLIENTCONTRACTDATA(INSTRFIELD IN VARCHAR2,INSTRCONTRACTNO IN VARCHAR2,CUR_OUTPUT OUT T_CURSOR)--ADDED BY DIDULA 25/10/2017 
IS
    BEGIN
        OPEN CUR_OUTPUT FOR
SELECT c.con_no,
       DECODE (a.clm_cori,
               '1', a.clm_cltitle || ' ' || a.clm_initialsfull || ' '
                || a.clm_name,
               a.clm_name
              ) cliname,
       a.clm_code,
       (   a.clm_permaddline1
        || '|'
        || a.clm_permaddline2
        || '|'
        || COALESCE (a.clm_permaddline3, a.clm_permaddline4)
        || '|'
        || NULLIF ((a.clm_permaddline4),
                   COALESCE (a.clm_permaddline3, a.clm_permaddline4)
                  )
       ) address
  FROM leaseinfo.tblcontracts c, corpinfo.tblclientmain a
 WHERE a.clm_code = c.con_clmcode
   AND INSTRFIELD = INSTRCONTRACTNO; ***here INSTRFIELD is the column name 
                                        that i need to pass***

END PR_GETCLIENTCONTRACTDATA;

將列名稱列入白名單:

PROCEDURE PR_GETCLIENTCONTRACTDATA(
  INSTRFIELD      IN  VARCHAR2,
  INSTRCONTRACTNO IN  VARCHAR2,
  CUR_OUTPUT      OUT T_CURSOR
)
IS
BEGIN
  OPEN CUR_OUTPUT FOR
    SELECT -- your select clauses
    FROM   leaseinfo.tblcontracts c,
           INNER JOIN corpinfo.tblclientmain a -- ANSI join syntax
           ON a.clm_code = c.con_clmcode
    WHERE  CASE INSTRFIELD 
           WHEN 'COLUMNA' THEN ColumnA
           WHEN 'COLUMNB' THEN ColumnB
           WHEN 'COLUMNC' THEN ColumnC
           END = INSTRCONTRACTNO;
END PR_GETCLIENTCONTRACTDATA;
/

當您使用OPEN cur FOR ...您可以傳遞一個字符串,即

PROCEDURE PR_GETCLIENTCONTRACTDATA(INSTRFIELD IN VARCHAR2,INSTRCONTRACTNO IN VARCHAR2,CUR_OUTPUT OUT T_CURSOR)
IS
 BEGIN
    OPEN CUR_OUTPUT FOR
      'SELECT c.con_no,
       DECODE (a.clm_cori,
               ''1'', a.clm_cltitle || '' '' || a.clm_initialsfull || '' ''
                || a.clm_name,
               a.clm_name
              ) cliname,
       a.clm_code,
       (   a.clm_permaddline1
        || ''|''
        || a.clm_permaddline2
        || ''|''
        || COALESCE (a.clm_permaddline3, a.clm_permaddline4)
        || ''|''
        || NULLIF ((a.clm_permaddline4),
                   COALESCE (a.clm_permaddline3, a.clm_permaddline4)
                  )
       ) address
       FROM leaseinfo.tblcontracts c
           JOIN corpinfo.tblclientmain a ON a.clm_code = c.con_clmcode
       WHERE '||DBMS_ASSERT.SIMPLE_SQL_NAME(INSTRFIELD)||' = :INSTRCONTRACTNO)' 
   USING INSTRCONTRACTNO;

END PR_GETCLIENTCONTRACTDATA;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM