sql >> Database teknologi >  >> RDS >> Oracle

PL/SQL indlejrede sløjfer med markører

Du skal hente fra en REF CURSOR og føj dynamisk kolonnenavnet til select-sætningen, mens du åbner markøren. Her henter jeg alle kolonnenavnene fra USER_TAB_COLUMNS for tabel EMPLOYEES og tildele deres tilsvarende værdier til v_temp.

SET SERVEROUTPUT ON;
DECLARE
  v_temp VARCHAR(50);
  query1 VARCHAR2(1000);
  c1 SYS_REFCURSOR;
  CURSOR c2
  IS
    SELECT COLUMN_NAME xxx FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'EMPLOYEES';
BEGIN
  FOR s2 IN c2
  LOOP
    --do something
    query1 := 'SELECT ' ||s2.xxx||' FROM EMPLOYEES';
    OPEN c1 FOR query1 ;
    LOOP
      FETCH c1 INTO v_temp;
      DBMS_OUTPUT.PUT_LINE('COLUMN:'||s2.xxx||', VALUE:'|| v_temp);
      EXIT
    WHEN c1%NOTFOUND;
    END LOOP;
    CLOSE c1;
  END LOOP;
END;
/

Siden længder af alle kolonner af Employees er <50 , fungerer det fint. Konverteringen sker implicit for NUMBER og DATE datatyper.

Her er et eksempel på output.

COLUMN:EMPLOYEE_ID, VALUE:100
COLUMN:EMPLOYEE_ID, VALUE:101
COLUMN:EMPLOYEE_ID, VALUE:102
COLUMN:FIRST_NAME, VALUE:Eleni
COLUMN:FIRST_NAME, VALUE:Eleni
COLUMN:LAST_NAME, VALUE:Whalen
COLUMN:LAST_NAME, VALUE:Fay
COLUMN:HIRE_DATE, VALUE:17-06-03
COLUMN:HIRE_DATE, VALUE:21-09-05


  1. Python MySQLdb-variabler som tabelnavne

  2. Hvordan gør man et varchar2-felt kortere i Oracle?

  3. Gyldige formatstrengerstatninger for SQLite Strftime()-funktionen

  4. Specialtegn, der udlæses fra MySQL, virker, men når jeg tilføjer charset-utf8, gør det det ikke. Hvorfor?