簡體   English   中英

SQL從表中選擇Like Column Name

[英]SQL Select Like Column Name from table

目標是創建一個Oracle函數,該函數能夠從用戶提供的令牌中查詢列名,以創建具有此類功能的函數

select cols_like('%e%') from table

這是我目前的觀點

CREATE OR REPLACE Function COLS_LIKE 
(v_search in VARCHAR2, v_table in VARCHAR2) 
RETURN VARCHAR
IS
    TYPE r_cursor IS REF CURSOR;
    c_emp         r_cursor;
    crs_cols      VARCHAR(255);
    column_list   VARCHAR(1000);
BEGIN    
    OPEN c_emp FOR 
        'select COLUMN_NAME from cols 
         where TABLE_NAME = ''' || v_table || ''' 
         and column_name like ''' || v_search || ''''; 
LOOP
    FETCH c_emp INTO crs_cols;

    EXIT WHEN c_emp%NOTFOUND;

    if column_list IS NULL THEN 
        column_list := crs_cols;
    else 
        column_list := column_list || ', ' || crs_cols;
    end if;
END LOOP; 

RETURN column_list;

END;

你在哪里調用這樣的功能

Declare
    tests VARCHAR(100);
    sql_stmt VARCHAR2(200);
begin
    tests := COLS_LIKE('%E%', 'table');
    DBMS_OUTPUT.PUT_LINE(tests);
-- OR
    sql_stmt := 'select ' || COLS_LIKE('%E%', 'table') || ' from table';
    DBMS_OUTPUT.PUT_LINE(sql_stmt);
end;

最終目標就是這樣

select COLS_LIKE('%E%', 'table') from table;

我可以對我的功能進行哪些修改或者如何調用以便正確應用此功能。

為什么你想做這樣的事情我不知道,但你可以很容易地將一個開放的光標返回到PL / SQL:

create or replace function cols_like (
     PTable in varchar2
   , PColumn in varchar2
     ) return sys_refcursor

   l_cols varchar2(32767);
   c_curs sys_refcursor;

begin

   select listagg(column_name, ', ') within group (order by column_id)
     into l_cols
     from user_tab_cols
    where table_name = upper(Ptable)
      and column_name like '%' || upper(PColumn) || '%'
          ;

   open c_curs for '
     select ' || l_cols || '
       from ' || Ptable;

   return c_curs;

end;
/

回到這一個標准的SQL語句將是一個困難的多 ,這是因為在選擇此功能你只選擇列的數據量。 您希望能夠選擇N列,這意味着您需要開始返回已動態創建的嵌套表。

我確信這是可能的; 但是,在你面前得到任何接近開始嘗試做到這一點想想為什么你這樣做。 問一個問題,你沒有說明你的最終目標,而是說明你的實際問題是什么。 有可能有更簡單的解決方案。

我也有同樣的問題,發現了這個,它對我有用。 我只是將兩個表中的移動數字進行比較,在其中一個表中,一些數字在開始時為0,有些則沒有。 終於得到了解決方案,並在開始時添加了%:

a.number was having numbers, in some of them starting 0 was missing. and b.number was accurate.

b.number like CONCAT('%',a.number)

暫無
暫無

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

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