我有一个 Cursor 从脚本中获取数据:
OPEN myCursor FOR
SELECT value1 AS Value1,
myPackage.function1 (value1, :myId) AS Result1,
myPackage.function2 (value1, :myId) AS Result2,
myPackage.function3 (value1, :myId) AS Result3
FROM mySchema.myTable
WHERE tpk = :myPk
USING myId, myId, myID
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用了myId变量 3 次,并且必须在 using 语句中将其传递 3 次才能使其工作。我在任何地方都找不到它,但是有没有办法只传递myId变量一次?
我不知道有什么内置方法可以实现这一点,但如果您的目标是只传递一次参数,您可以使用派生表或公用表表达式(CTE 或 Oracle 喜欢称它们为:subquery_factoring_clause)的USING
:
-- derived table
OPEN myCursor FOR
SELECT value1 AS Value1,
myPackage.function1 (value1, my.id) AS Result1,
myPackage.function2 (value1, my.id) AS Result2,
myPackage.function3 (value1, my.id) AS Result3
FROM (SELECT :myId AS id, :myPk AS pk FROM dual) my
CROSS JOIN
mySchema.myTable
WHERE tpk = my.pk
USING myPk, myId
-- CTE
OPEN myCursor FOR
WITH my AS
(SELECT :myId AS id, :myPk AS pk FROM dual)
SELECT value1 AS Value1,
myPackage.function1 (value1, my.id) AS Result1,
myPackage.function2 (value1, my.id) AS Result2,
myPackage.function3 (value1, my.id) AS Result3
FROM my
CROSS JOIN
mySchema.myTable
WHERE tpk = my.pk
USING myPk, myId
Run Code Online (Sandbox Code Playgroud)