oracle - 评估动态 PLSQL 语句
问题描述
此过程的目的是将记录类型的列组合成一行文本。
例子: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;
解决方案
推荐阅读
- sql - SQL 使用 Like 运算符连接
- python - 更新“无”值不会反映在对象中
- c# - 在单人游戏中处理第一人称游戏的鼠标
- stack - Stack Overflow 开发人员调查的状态信息
- spring-boot - 如何使自签名证书受远程连接信任
- java - TabItem:ClickListener 不起作用(Android/Java)
- mysql - 遇到root用户不授予权限的问题
- mongodb - mongodb-go-driver接口转换:接口{}是primitive.ObjectID,不是primitive.ObjectID(不同包的类型)
- git - Android Studio 中 git 分支名称旁边的图标是什么意思?
- azure-cosmosdb - 多区域 Azure Cosmos DB 中的更改源