减少oracle PL/SQL语句
我是PL/SQL方面的新手。经过几个小时的学习,我有一些 我有几个奇怪的问题。示例我有一个SQL语句,如下所示:减少oracle PL/SQL语句,sql,oracle,Sql,Oracle,我是PL/SQL方面的新手。经过几个小时的学习,我有一些 我有几个奇怪的问题。示例我有一个SQL语句,如下所示: SELECT ShipperName, OrderID, NumberOfOrders, ... FROM Orders 我们是否可以声明一个包含“列表选择”的变量,比如list\u select='ShipperName,OrderID,NumberOfOrders,…' 然后用声明的“列表选择”替换select语句 SELECT list_select FROM Order
SELECT ShipperName, OrderID, NumberOfOrders, ...
FROM Orders
我们是否可以声明一个包含“列表选择”的变量,比如list\u select='ShipperName,OrderID,NumberOfOrders,…'代码>
然后用声明的“列表选择”替换select语句
SELECT list_select
FROM Orders
还有另外一个问题,我们是否可以像图片一样减少SQL语句。我曾在OracleSQLDeveloper中尝试过这个,编译器还可以,但当我运行测试时,我得到了一个错误“按段”
我们非常感谢您的帮助 对于第一个问题,您可以搜索用于动态查询执行的“executeimmediate”语句。所以你可以试试下面的方法-
EXECUTE IMMEDIATE 'SELECT ' || YOUR_COMMA_DELIMITED_COLUMNS_LIST || ' FROM Orders';
对于第二个问题,请发布示例数据和预期结果。对于第一个问题,您可以搜索用于动态查询执行的“立即执行”语句。所以你可以试试下面的方法-
EXECUTE IMMEDIATE 'SELECT ' || YOUR_COMMA_DELIMITED_COLUMNS_LIST || ' FROM Orders';
对于第二个问题,请发布示例数据和预期结果。对于第二个问题:您不希望在此处加入,因为您仅从表1中选择。您希望[NOT]存在
或[NOT]在
中。例如:
SELECT orderid, clientid
FROM orders o
WHERE EXISTS -- We are looking for orders containing expensive items
(
SELECT null
FROM orderposition op
WHERE op.orderid = o.orderid
AND op.price > 1000
)
AND -- and the client ...
(
NOT EXISTS -- ... must have paid all their invoices (there exists no unpaid invoice)
(
SELECT null
FROM invoices i
WHERE i.clientid = o.clientid
AND i.paid_date IS NULL
)
OR clientid IN -- ... or be known as reliable client (they are in the set of reliable ones)
(
SELECT c.clientid
FROM clients c
WHERE c.reliable = 'YES'
)
);
对于第二个问题:这里不需要联接,因为您只从表1中进行选择。您希望[NOT]存在
或[NOT]在
中。例如:
SELECT orderid, clientid
FROM orders o
WHERE EXISTS -- We are looking for orders containing expensive items
(
SELECT null
FROM orderposition op
WHERE op.orderid = o.orderid
AND op.price > 1000
)
AND -- and the client ...
(
NOT EXISTS -- ... must have paid all their invoices (there exists no unpaid invoice)
(
SELECT null
FROM invoices i
WHERE i.clientid = o.clientid
AND i.paid_date IS NULL
)
OR clientid IN -- ... or be known as reliable client (they are in the set of reliable ones)
(
SELECT c.clientid
FROM clients c
WHERE c.reliable = 'YES'
)
);
请不要将代码作为图像发布。请参阅此处了解更多详细信息为什么:请每次回答一个问题。这应该是两个请求:第一个是关于动态SQL的请求(可以用PL/SQL解决,如Ankit Bajpai的回答所示)。第二个是关于如何在SQL中优化查询的问题(如我在回答中所回答的)。如果您有两个问题,请在单独的帖子中提出两个问题。StackOverflow上的线程应该包含一个问题和(理想情况下)一个可接受的答案。这个帖子有两个独立的答案,一个用于你发布的每个问题。您不能同时接受这两种格式。请不要将代码作为图像发布。请参阅此处了解更多详细信息为什么:请每次回答一个问题。这应该是两个请求:第一个是关于动态SQL的请求(可以用PL/SQL解决,如Ankit Bajpai的回答所示)。第二个是关于如何在SQL中优化查询的问题(如我在回答中所回答的)。如果您有两个问题,请在单独的帖子中提出两个问题。StackOverflow上的线程应该包含一个问题和(理想情况下)一个可接受的答案。这个帖子有两个独立的答案,一个用于你发布的每个问题。你不能两者都接受。