Skip to Main Content

Breadcrumb

Question and Answer

Connor McDonald

Thanks for the question, Krishna.

Asked: January 21, 2019 - 3:51 pm UTC

Last updated: January 22, 2019 - 12:38 am UTC

Version: 12.2.0

Viewed 1000+ times

You Asked


We need to move datafile from one location to another location using a procedure.

CREATE OR REPLACE PROCEDURE FILE_MOVING_FROM_DISK AS
DISK_FILE_NAME VARCHAR2(200);
RES_TS VARCHAR2(100):='USERS';
sql_stmt VARCHAR2(500);
DISK_PATH VARCHAR2(200):='/u02/app/oracle/oradata/';
FILE_NAME VARCHAR2(50):='users1a.dbf';
BEGIN


sql_stmt:='alter database move datafile '||''''||DISK_FILE_NAME||''''||' to '||''''||DISK_PATH||FILE_NAME||''''||';';

EXECUTE IMMEDIATE sql_stmt;

END FILE_MOVING_FROM_DISK;

When I am executing this procedure getting an error as shown below.

ERROR at line 1:
ORA-02231: missing or invalid option to ALTER DATABASE
ORA-06512: at "USER1.FILE_MOVING_FROM_DISK", line 14
ORA-06512: at line 1

Please let me know user1 require any additional privileges to execute it.



and Connor said...

You don't need a semi-colon to run the DDL in a procedure.

In SQL Plus, when we do this:

SQL> alter database move datafile 'X:\ORADATA\DB18\PDB1\DEMO.DBF' to 'C:\TEMP\DEMO.DBF';


the same in a procedure would be:

execute immediate q'{alter database move datafile 'X:\ORADATA\DB18\PDB1\DEMO.DBF' to 'C:\TEMP\DEMO.DBF'}';


The 'q' notation makes handling quotes easier

Is this answer out of date? If it is, please let us know via a Comment

More to Explore

PL/SQL demos

Check out more PL/SQL tutorials on our LiveSQL tool.

PL/SQL docs

PL/SQL reference manual from the Oracle documentation library