2013-12-09 30 views
3

我想在SQL Developer中运行以下查询,但我收到一个错误。我试图声明两个局部变量(var_num1和payDate),然后设置变量。有谁知道我可以做错吗?我知道Oracle SQL与SQL Server有点不同。Oracle PL/SQL选择到变量

DECLARE 
    var_num1 number; 
    payDate date; 
BEGIN 
    var_num1 := 100; 
    payDate := '10/1/2013' 
    BEGIN 
    SELECT * FROM Paycode WHERE PaycodeID = var_num1 and PaycodeDate = payDate; 
    End; 
END; 

Error report: 
ORA-06550: line 6, column 2: 
PLS-00428: an INTO clause is expected in this SELECT statement 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 
+0

这是一个PL/SQL块,而不是查询。 –

回答

7

不能使用SELECT INTO没有在PL/SQL子句。 SELECT的输出必须存储在某处。例如。表或变量或者记录。请参阅下面的示例,了解如何将SELECT语句的结果存储到记录中。

DECLARE 
    var_num1 number; 
    payDate date; 
    v_result Paycode%ROWTYPE; 
BEGIN 
    var_num1 := 100; 
    payDate := '10/1/2013'; 

    SELECT * INTO v_result 
    FROM Paycode 
    WHERE PaycodeID = var_num1 and PaycodeDate = payDate; 

END; 
+0

谢谢你的回复。是“v_result”变量还是表?我不想创建一个表。 – user3083460

+1

它基本上是一个存储在变量中的行(有些可能会调用该对象)。在选择表格中的所有列时(使用*),存储整行内容的方式很常见,请参见http://www.oracle.com/technetwork/issue-archive/2012/12-may/o32plsql-1578019.html – tvm

+0

哦,太棒了,所以它实际上并没有创建物理行或表?这只是在查询执行时才存储在内存中,对吗?谢谢你的帮助。 – user3083460

0

如果您想要使用此代码块返回SQL Developer中的结果集,您需要为查询打开一个参考光标,例如,

DECLARE 
    refCur REF CURSOR; 
    refc refCur; 
    var_num1 number; 
    payDate date; 
    v_result Paycode%ROWTYPE; 
BEGIN 
    var_num1 := 100; 
    payDate := '10/1/2013'; 

OPEN refc FOR 
    SELECT * 
    FROM Paycode 
    WHERE PaycodeID = var_num1 and PaycodeDate = payDate; 

END;