我的database 為win2000+oracle8i,現在我創見一個procedure居然出錯
procedure source:
-------------------------------------------
CREATE Procedure ON_LINE_DBBK is
CURSOR C1 IS
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES
WHERE TABLESPACE_NAME LIKE '%'
ORDER BY TABLESPACE_NAME ASC;
CURSOR C2(V_TABLESPACE IN VARCHAR2) IS
SELECT FILE_NAME FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME = V_TABLESPACE
ORDER BY FILE_NAME ASC;
BEGIN
begin
dbms_output.put_line('echo Begin backup database...');
dbms_output.put_line('host date/t');
dbms_output.put_line('host time/t'); FOR C1_REC IN C1 LOOP
dbms_output.put_line('alter tablespace '||c1_rec.tablespace_name||' begin backup;');
for c2_rec in c2(c1_rec.tablespace_name) loop
dbms_output.put_line('host copy'||c2_rec.file_name||' e:\back\hrmtest');
end loop; ---c2
dbms_output.put_line('alter tablespace '||c1_rec.tablespace_name||' end backup;');
END loop; ---c1
dbms_output.put_line('echo End backup database...');
dbms_output.put_line('host date/t');
dbms_output.put_line('host time/t');
end;
END; -- on_line_dbbk
-----------------------
errors:
(1):PLS-00201: identifier 'SYS.DBA_TABLESPACES' must be declared
(2):PL/SQL: SQL Statement ignored
(3):PLS-00201: identifier 'SYS.DBA_DATA_FILES' must be declared
(4):PL/SQL: SQL Statement ignored
(5):PLS-00364: loop index variable 'C1_REC' use is invalid
(6):PL/SQL: Statement ignored
(7):PLS-00364: loop index variable 'C1_REC' use is invalid
(8):PL/SQL: Statement ignored
(9):PLS-00364: loop index variable 'C1_REC' use is invalid
(10):PL/SQL: Statement ignored
--------------------------
其中我用一般的sql語句處理
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES
ORDER BY TABLESPACE_NAME ASC 成功
請問原因是什麼.
procedure source:
-------------------------------------------
CREATE Procedure ON_LINE_DBBK is
CURSOR C1 IS
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES
WHERE TABLESPACE_NAME LIKE '%'
ORDER BY TABLESPACE_NAME ASC;
CURSOR C2(V_TABLESPACE IN VARCHAR2) IS
SELECT FILE_NAME FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME = V_TABLESPACE
ORDER BY FILE_NAME ASC;
BEGIN
begin
dbms_output.put_line('echo Begin backup database...');
dbms_output.put_line('host date/t');
dbms_output.put_line('host time/t'); FOR C1_REC IN C1 LOOP
dbms_output.put_line('alter tablespace '||c1_rec.tablespace_name||' begin backup;');
for c2_rec in c2(c1_rec.tablespace_name) loop
dbms_output.put_line('host copy'||c2_rec.file_name||' e:\back\hrmtest');
end loop; ---c2
dbms_output.put_line('alter tablespace '||c1_rec.tablespace_name||' end backup;');
END loop; ---c1
dbms_output.put_line('echo End backup database...');
dbms_output.put_line('host date/t');
dbms_output.put_line('host time/t');
end;
END; -- on_line_dbbk
-----------------------
errors:
(1):PLS-00201: identifier 'SYS.DBA_TABLESPACES' must be declared
(2):PL/SQL: SQL Statement ignored
(3):PLS-00201: identifier 'SYS.DBA_DATA_FILES' must be declared
(4):PL/SQL: SQL Statement ignored
(5):PLS-00364: loop index variable 'C1_REC' use is invalid
(6):PL/SQL: Statement ignored
(7):PLS-00364: loop index variable 'C1_REC' use is invalid
(8):PL/SQL: Statement ignored
(9):PLS-00364: loop index variable 'C1_REC' use is invalid
(10):PL/SQL: Statement ignored
--------------------------
其中我用一般的sql語句處理
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES
ORDER BY TABLESPACE_NAME ASC 成功
請問原因是什麼.
declare
CURSOR C1 IS
SELECT TABLESPACE_NAME FROM DBA_TABLESPACES
WHERE TABLESPACE_NAME LIKE '%'
ORDER BY TABLESPACE_NAME ASC;
CURSOR C2(V_TABLESPACE IN VARCHAR2) IS
SELECT FILE_NAME FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME = V_TABLESPACEd
ORDER BY FILE_NAME ASC;
BEGIN
begin
dbms_output.put_line('echo Begin backup database...');
dbms_output.put_line('host date/t');
dbms_output.put_line('host time/t'); FOR C1_REC IN C1 LOOP
dbms_output.put_line('alter tablespace '||c1_rec.tablespace_name||' begin backup;');
for c2_rec in c2(c1_rec.tablespace_name) loop
dbms_output.put_line('host copy'||c2_rec.file_name||' e:\back\hrmtest');
end loop; ---c2
dbms_output.put_line('alter tablespace '||c1_rec.tablespace_name||' end backup;');
END loop; ---c1
dbms_output.put_line('echo End backup database...');
dbms_output.put_line('host date/t');
dbms_output.put_line('host time/t');
end;
END;
/