【发布时间】:2012-06-08 20:05:05
【问题描述】:
在 Sql Server 中,我经常在测试存储过程的主体时,将主体复制到 SSMS 中,在页面顶部声明变量,将它们设置为一些示例值,然后将主体执行为-是。
例如,如果我的 proc 是
CREATE PROC MySampleProc
@Name VARCHAR(20)
AS
SELECT @Name
那么我的测试sql就是
DECLARE @Name VARCHAR(20)
SET @Name = 'Tom'
SELECT @Name
与此等效的 Oracle PL/SQL 是什么?
这是我想出的最接近的方法,但我得到“PLS-00428:此 SELECT 语句中应有一个 INTO 子句”
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
select myname from DUAL;
END;
这是我真正想做的一个更好的例子:
DECLARE
myname varchar2(20);
BEGIN
myname := 'Tom';
SELECT *
FROM Customers
WHERE Name = myname;
END;
但同样,它需要一个“INTO”,而我真的只想将记录打印在屏幕上,而不是存储在另一个表中......
已解决:
感谢@Allan,我已经让它运行良好。 Oracle SQL Developer 显然会记住您提供给它的参数值。然而,PL/SQL Developer 不想与此有任何关系....
如果您“以脚本方式运行”,它将遵循您的默认设置,但它只会将结果作为 ASCI 文本返回,而不是在网格/电子表格中
【问题讨论】:
-
这是我找到的与我的答案最接近的,但他们没有显示如何在查询的选择列表中使用该变量,并且不断向我抛出错误。 plsql-tutorial.com/plsql-variables.htm
-
你最后一段代码有两个问题。 1)变量前面不需要冒号,无论是在赋值中还是在 SELECT 语句中。 2) SELECT 语句的结果需要去某个地方,例如你声明第二个变量并写
SELECT Name INTO Name2 FROM DUAL。 -
如果我不想让结果出现在某个地方,我只想让它们显示在 PL/SQL Developer 的网格中怎么办?
-
这是不可能的(除非您使用相当高级的功能)。 T-SQL 和 PL/SQL 在这方面有很大不同。如果您想测试存储过程,那么您可能需要使用 DBMS_OUTPUT.PRINT_LINE 以大多数 Oracle 工具(例如 TOAD、SQL Developer、PL/SQL Developer)可以捕获和显示的方式编写结果。
-
我过去也曾为此苦苦挣扎。您必须使用 select into 并使用 dbms_output.put_line(myname); 打印输出Oracle 使用游标返回结果,SQL Server 不使用。
标签: sql-server oracle tsql plsql oracle-sqldeveloper