【发布时间】:2025-11-24 05:35:01
【问题描述】:
我有一个想要转换为 PLSQL 的 SQL 查询(一个存储过程) 我已经转换了大部分存储过程,但我无法转换以下部分:
DECLARE lookupTableRow CURSOR FOR
SELECT TableName FROM SYS_LookUpTable
OPEN lookupTableRow
FETCH NEXT FROM lookupTableRow INTO @tableName
WHILE @@FETCH_STATUS=0
BEGIN
SET @sql='SELECT * FROM '+@tableName
EXECUTE sp_executesql @sql
IF @counter=0
BEGIN
INSERT INTO T_TABLE_MAPPING VALUES('P_MAIN_METADATA', 'Table', @tableName)
END
ELSE
BEGIN
INSERT INTO T_TABLE_MAPPING
VALUES( 'P_MAIN_METADATA',
'Table' + CONVERT(NVARCHAR(10),@counter),
@tableName)
END
SET @counter=@counter+1
FETCH NEXT FROM lookupTableRow INTO @tableName
END
CLOSE lookupTableRow
DEALLOCATE lookupTableRow
据我了解,当表名是参数时,我不能使用 ORACLE 动态 sql(立即执行)。
此外,当我在我的 SQL 存储过程中执行此动态查询时,每个 SELECT 语句都会返回我作为相关表行的结果,这些结果在每个循环中都是不同的。
请提供任何解决方案的建议 * 我如何使用以表名作为参数的动态 sql? * 如何使用“动态”光标,以便能够显示动态结果?
谢谢你的建议
【问题讨论】:
-
'Table' + CONVERT(NVARCHAR(10),@counter)对这段代码做了什么? -
看来您正试图混淆实际的表名,并在 T_TableMapping 中为它们分配 Table# 的名称。如果是这样的话,这样的工作吗?
Select owner, table_name, 'Table' || to_char(rownum) from all_tables order by owner, table_name -
但是在 SQL 上,下面的代码是一个 SELECT 语句。这个 SELECT 在每个循环上都在变化。 SELECT 的表结果被填充到数据集(在 c# 代码中)所以我需要找到一种方法来做到这一点: SET @sql='SELECT * FROM '+@tableName EXECUTE sp_executesql @sql
-
@RefaelCohen
I have a SQL query (a store procedure )SQL 是许多 RDBMS 的行业标准编程语言。您可能指的是作为 MS SQL Server 产品一部分的 Transact-SQL 或 T-SQL 存储过程。请使用适当的术语以避免混淆。
标签: oracle dynamic-sql