下面的SQL导致Oracle 11 g错误:但在我看来,我的print
过程需要1个varchar 2参数,而这正是我作为参数传递给它的。
CREATE TABLE employees (full_name VARCHAR2(64))
//
INSERT INTO employees (full_name) VALUES ('John')
//
INSERT INTO employees (full_name) VALUES ('Paul')
//
INSERT INTO employees (full_name) VALUES ('George')
//
INSERT INTO employees (full_name) VALUES ('Ringo')
//
CREATE OR REPLACE PROCEDURE print (
v_string IN VARCHAR2
) IS
BEGIN
dbms_output.put_line(v_string);
END print;
//
DECLARE
v_string VARCHAR2(64);
BEGIN
FOR v_string IN (SELECT DISTINCT full_name
FROM employees) LOOP
print (v_string);
END LOOP;
END;
//
我可以在SQLFiddle中重现这个问题:http://sqlfiddle.com/#!4/c0e80e/6
我错过了什么?
谢谢
1条答案
按热度按时间bq9c1y661#
没错你做错了应该是
为什么?因为你声明了局部变量并使用了游标
FOR
循环(其记录与局部变量同名)。传递给print
过程的是游标变量,而不是局部变量。正如文档所述:
游标FOR LOOP语句将其循环索引隐式声明为指定游标返回的行类型的记录变量,然后打开游标。
for record in ...
,其中record
表示游标FOR LOOP语句隐式声明为游标或select_statement返回类型的%ROWTYPE记录变量的循环索引的名称。