2012-11-23 34 views
-1

我有一個表EMPLOYEES,我需要做一個循環,在循環的每一步我使用dbms_output.put_line(column_name)如何爲表中的所有列創建循環?

我該如何做到這一點?

+0

什麼是想做*做*與此循環中的列?如果除了顯示列名以外,您還需要使用動態SQL。看看最近問題的答案:http://stackoverflow.com/a/13483646/146325 – APC

回答

2

剛剛發現這個解決方案

begin 
    for rec in (SELECT column_name 
       FROM all_tab_columns 
       WHERE owner = 'HR' 
       AND table_name = 'EMPLOYEES') 
    loop 
     dbms_output.put_line(rec.column_name); 
    end loop; 
end; 
0

嘗試使用如下光標:

set serveroutput on; 
declare 
var_col1 varchar2(30) ; 
num_col2 number ; 

CURSOR cur 
is  
    select var_col ,num_col 
    from table 
    where <conditions>; 

begin 
    open cur; 
    fetch cur into var_col1,num_col2; 

    LOOP 
    fetch cur into var_col1,num_col2; 
     EXIT WHEN cur%NOTFOUND; 
     dbms_output.put_line(var_col1||'   '||num_col2); 
    END LOOP; 

    close cur; 
end; 

這裏是另一種解決方案:

set serveroutput on; 
begin 
    FOR cur in (select var_col ,num_col from table where <conditions>) 
    LOOP 
    dbms_output.put_line(cur.var_col||' = '||cur.num_col); 
    END LOOP; 
end; 
+0

這完全忽略了OP的問題。 – APC

+0

@APC'循環爲表的所有列'在我的解決方案中有一個循環,並逐步從表中顯示列。你認爲他想要別的東西嗎? – Parado

+0

@APC我看到你編輯了David Kakauridze的帖子。我確信他的第一個解決方案錯過了這一點。 – Parado

0

當然你也可以改寫這個選擇示例在table_name之後。我沒有編譯這個代碼,但我認爲它確定。更改ID_Employee和名稱爲您的屬性

CREATE OR REPLACE PROCEDURE AAA_TEST 
    IS 
    BEGIN 
     DECLARE 
      v_id NUMBER :=0; 
      v_name VARCHAR2(25); 

      CURSOR cursorMails IS 
       SELECT Id_Employee,Name FROM EMPLOYEES; 

      BEGIN 
          OPEN cursorMails; 

           LOOP 

            FETCH cursorMails INTO v_id, v_name; 
             DBMS_OUTPUT.PUT_LINE('Number of Employee: ' || v_id || ' Name Employee: ' || v_name); 
           EXIT WHEN cursorMails%NOTFOUND; 
           END LOOP; 
          CLOSE cursorMails; 
      END; 
    END; 
    /