【发布时间】:2016-06-21 09:51:21
【问题描述】:
我有一个如下所示的 SQl 服务器查询。
DECLARE @TYPE_ID NUMERIC;
DECLARE @ELCFIELD_ID_1 NUMERIC;
DECLARE @ELCFIELD_ID_2 NUMERIC;
DECLARE @ELCFIELD_ID_3 NUMERIC;
DECLARE @ELCFIELD_ID_4 NUMERIC;
DECLARE @ELCFIELD_ID_5 NUMERIC;
DECLARE @ELCCMT_CODE NUMERIC;
BEGIN
SELECT @TYPE_ID =
(SELECT (MAX(COALESCE(TYPE_ID,0)) + 1) FROM HS_HR_ELC_TYPE);
SELECT @ELCFIELD_ID_1 =
(SELECT (MAX(COALESCE(ELCFIELD_ID,0)) + 1) FROM HS_HR_ELC_FIELD);
SELECT @ELCFIELD_ID_2 =
(SELECT (MAX(COALESCE(ELCFIELD_ID,0)) + 2) FROM HS_HR_ELC_FIELD);
SELECT @ELCFIELD_ID_3 =
(SELECT (MAX(COALESCE(ELCFIELD_ID,0)) + 3) FROM HS_HR_ELC_FIELD);
SELECT @ELCFIELD_ID_4 =
(SELECT (MAX(COALESCE(ELCFIELD_ID,0)) + 4) FROM HS_HR_ELC_FIELD);
SELECT @ELCFIELD_ID_5 =
(SELECT (MAX(COALESCE(ELCFIELD_ID,0)) + 5) FROM HS_HR_ELC_FIELD);
SELECT @ELCCMT_CODE =
(SELECT (MAX(COALESCE(ELCCMT_CODE,0)) + 1) FROM HS_HR_ELC_COMMENT_DEF);
我希望它转换为 Oracle 查询以在 Toad 中运行。
到目前为止,我已经找到了一种方法。
DECLARE
TYPE_ID NUMBER;
ELCFIELD_ID_1 NUMBER;
ELCFIELD_ID_2 NUMBER;
ELCFIELD_ID_3 NUMBER;
ELCFIELD_ID_4 NUMBER;
ELCFIELD_ID_5 NUMBER;
ELCCMT_CODE NUMBER;
BEGIN
TYPE_ID := 5;
ELCFIELD_ID_1 := 5;
ELCFIELD_ID_2 := 5;
ELCFIELD_ID_3 := 5;
ELCFIELD_ID_4 := 5;
ELCFIELD_ID_5 := 5;
ELCCMT_CODE := 5;
END;
但我仍然无法将查询分配给如下变量
SELECT @TYPE_ID =
(SELECT (MAX(COALESCE(TYPE_ID,0)) + 1) FROM HS_HR_ELC_TYPE);
请帮我做这件事。提前谢谢你。
【问题讨论】:
-
您收到错误或有什么问题?
-
您检查过文档吗?不难找到如何声明变量并从查询结果中为它们赋值。另请注意,您可以从 SELECT 查询中检索多个值。您可以使用单个 SELECT 从
HS_HR_ELC_FIELD检索所有必需的值 -
@Thomas 我可以直接为变量赋值,但在从另一个查询赋值时遇到问题。
-
这样做的目的是什么?你打算如何处理这些变量?我怀疑选择数字的最大值并将其加 1 的代码,因为当您让用户同时运行代码时,这是一个潜在的错误。更不用说您的代码效率低下-您为什么要从 HS_HR_ELC_FIELD 中找到 ELCFIELD_ID 列的最大值 5 次?您确定找到它一次,然后根据需要添加 1、2、3、4 或 5?除非你不能将一个变量添加到 sql server 中的另一个变量? (我觉得很难想象,tbh!)
-
是的。你所说的是正确的。但我只需要将 SQL 脚本转换为 Oracle 脚本。所以我遵循相同的结构。
标签: sql-server oracle toad