我写了一个函数,我删除了一个表中的行号。我不太明白错误
DECLARE
a integer ;
CREATE OR REPLACE function f (j sejour.jour%type) return integer is
n integer
begin
select count(*) into n from sejour where jour < j ;
Delete Sejour where jour < j ;
RETURN n ;
end;
BEGIN
a:= 5;
c := f(a);
dbms_output.put_line(' Nombre est : ' || c);
END;
/
我有错误:
ERROR at line 4:
ORA-06550: line 4, column 1:
PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:
begin function pragma procedure subtype type <an identifier>
<a double-quoted delimited-identifier> current cursor delete
exists prior
答案 0 :(得分:1)
我认为你正在寻找这样的东西:
create or replace function f (in_j sejour.jour%type)
return integer is
v_n integer;
begin
select count(*) into v_n from sejour where jour < in_j ;
delete Sejour where jour < in_j ;
return v_n ;
end;
/
declare
v_a integer ;
v_c integer;
begin
v_a := 5;
v_c := f(v_a);
dbms_output.put_line('Nombre est : ' || v_c);
end;
/
注意:
答案 1 :(得分:1)
实际上,还有另一种选择,它使事情更接近原始的努力,并且不会导致创建模式级功能。只需删除“创建或替换”。
DECLARE
a INTEGER;
FUNCTION f (j sejour.jour%TYPE)
RETURN INTEGER
IS
n INTEGER;
BEGIN
SELECT COUNT (*)
INTO n
FROM sejour
WHERE jour < j;
DELETE sejour
WHERE jour < j;
RETURN n;
END;
BEGIN
a := 5;
c := f (a);
DBMS_OUTPUT.put_line (' Nombre est : ' || c);
END;
请记住:“创建或替换”不是PL / SQL的一部分。这是SQL本身的DDL语法。
答案 2 :(得分:0)
DECLARE
语句应该在AS关键字之后。
CREATE OR REPLACE function f (j sejour.jour%type) return integer is
DECLARE
a integer ,n integer
begin
select count(*) into n from sejour where jour < j ;
Delete Sejour where jour < j ;
RETURN n ;
end;
BEGIN
a:= 5;
c := f(a);
dbms_output.put_line(' Nombre est : ' || c);
END;
答案 3 :(得分:0)
- 在PLSQL块中执行此操作,即不创建架构/ SQL级别对象 - 创建或替换仅用于创建不属于PLSQL对象的SQL对象。
DECLARE
a INTEGER ;
FUNCTION f(
j sejour.jour%type)
RETURN INTEGER
IS
n INTEGER;
BEGIN
SELECT COUNT(*) INTO n FROM sejour WHERE jour < j ;
DELETE Sejour WHERE jour < j ;
RETURN n ;
END;
BEGIN
a := 5;
c := f(a);
dbms_output.put_line(' Nombre est : ' || c);
END;
/
- 通过创建SQL级别对象函数并在PLSQL块中调用它来实现它的第二种方法,如下所示。
CREATE OR REPLACE
FUNCTION f(
j sejour.jour%type)
RETURN INTEGER
IS
n INTEGER;
BEGIN
SELECT COUNT(*) INTO n FROM sejour WHERE jour < j ;
DELETE Sejour WHERE jour < j ;
RETURN n ;
END;
/
- 创建后调用PLSQL块中的函数
DECLARE
a INTEGER ;
BEGIN
a := 5;
c := f(a);
dbms_output.put_line(' Nombre est : ' || c);
END;
/