Цель этого процесса - объединить столбцы типа записи в строку текста.
Пример: 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;