2012-10-18 19 views
0

美好的一天,的Oracle PL-SQL序列

我想我的查询使用PL/SQL变量(我是一个SQL Server的家伙),这里是我的代码:

DECLARE 
    nextvalue  integer; 
BEGIN 

    SELECT submission_seq.currval INTO nextvalue FROM DUAL; 

    dbms_output.put_line('test');  
    dbms_output.put_line(nextvalue); 

    /* ERROR OCCURS HERE */ 
    SELECT nextvalue, id FROM TABLE_STATUS; 

END; 

我得到了PLS-00428:在这个SELECT语句中预计有一个INTO子句。

我不明白为什么我得到这个,因为我用一个填充下一个值其中确实包含我想要的。

任何人都可以帮助我吗?

TIA,

COSON

回答

1

这是因为,作为消息描述,select语句期待你的结果分配到一个变量。

尝试:

DECLARE 
    nextvalue  integer; 
    result  table_status%type; 
BEGIN 

    SELECT submission_seq.nextval INTO nextvalue FROM DUAL; 

    dbms_output.put_line('test');  
    dbms_output.put_line(nextvalue); 


    SELECT id INTO result FROM TABLE_STATUS; 

END; 
+0

嗯,这无疑更有意义。我认为“table_status%type”是指TABLE_STATUS中的一列。 – coson

+0

是的,您希望您的变量与您试图保存在您的ID中的数据列的类型具有相同的类型。 – dimitrisli

0

的secuence已经开始?

更改此

SELECT submission_seq.currval INTO nextvalue FROM DUAL; 

SELECT submission_seq.nextval INTO nextvalue FROM DUAL; 
+0

没有。我确实希望currval不是nextval。 – coson

0

如果您正在使用Oracle 11g,那么你没有从双再进行选择。下面的代码将工作。

/* Formatted on 1/25/2013 4:35:00 PM */ 
DECLARE 
    nextvalue  NUMBER := submission_seq.currval; 
BEGIN 
    DBMS_OUTPUT.put_line ('test'); 
    DBMS_OUTPUT.put_line (nextvalue); 
END; 
0

试试这个:

DECLARE 
    nextvalue  integer; 
BEGIN 
nextvalue := submission_seq.currval; 

dbms_output.put_line('test');  
dbms_output.put_line(nextvalue); 

SELECT nextvalue, id FROM TABLE_STATUS; 

END;