Оценка динамического состояния PLSQL - PullRequest
0 голосов
/ 11 октября 2018

Цель этого процесса - объединить столбцы типа записи в строку текста.

Пример: SALARY= 80000, POSITION=ENG, ID=8

Как динамически оценить l_stmt.

Обратите внимание, что я не хочу делать это традиционным способом путем объединения.

Открыт для других предложений.

Спасибо

CREATE TABLE Employee
(
   ID         INTEGER,
   POSITION   VARCHAR2 (32),
   SALARY     NUMBER
);

INSERT INTO EMPLOYEE (ID, POSITION, SALARY)
     VALUES (1, 'ENG', '100000');

INSERT INTO EMPLOYEE (ID, POSITION, SALARY)
     VALUES (2, 'PROGRAMMER', '80000');

COMMIT;


CREATE OR REPLACE PROCEDURE column_to_text (rec employee%ROWTYPE)
AS
   TYPE tb IS TABLE OF VARCHAR2 (30)
      INDEX BY BINARY_INTEGER;

   l_colnames   tb;
   l_stmt       VARCHAR2 (2500);
BEGIN
   SELECT column_name
     BULK COLLECT INTO l_colnames
     FROM sys.all_tab_cols
    WHERE table_name = 'EMPLOYEE';

   FOR i IN 1 .. l_colnames.COUNT
   LOOP
      l_stmt :=
         l_stmt || l_colnames (i) || '=' || 'REC.' || l_colnames (i) || ', ';

   END LOOP;

   DBMS_OUTPUT.PUT_LINE ( l_stmt );

   --SALARY=REC.SALARY, POSITION=REC.POSITION, ID=REC.ID,
END;
...