I am trying to use a PL/SQL block in PreparedStatement in Java. The schema name will be coming externally. Here is the code:
PreparedStatement statement = null;
try {
statement = connection.prepareStatement("
declare
p_schema_name varchar2(400):= upper('" + schema + "');
l_owner varchar2(400);
l_object_name varchar2(400);
cursor c1_views is
select
owner,
object_name
from dba_objects
where object_type in (''VIEW'')
and status = ''INVALID''
and owner = p_schema_name;
begin
open c1_views;
loop
fetch c1_views into l_owner, l_object_name;
if c1_views%notfound then
exit;
else
execute immediate 'alter view '||l_owner||'.'||l_object_name||' compile ';
end if;
end loop;
begin
dbms_utility.compile_schema(schema => p_schema_name);
end;
end;");
statement.execute();
} catch (SQLException e) {
System.out.println("ERROR: Unable to compile schema " + schema + " in afterMigrate: " + e.getMessage());
} finally {
if (null != statement) {
try {
statement.close();
} catch (SQLException se) {
System.out.println("ERROR: Unable to close statement in afterMigrate: " + se.getMessage());
}
}
}
and these are the errors I got
javac example.java
example.java:25: error: unclosed string literal
statement = connection.prepareStatement("
^
example.java:25: error: ';' expected
statement = connection.prepareStatement("
^
example.java:27: error: ';' expected
p_schema_name varchar2(400):= up
per('" + schema + "');
^
example.java:27: error: unclosed character literal
p_schema_name varchar2(400):= up
per('" + schema + "');
^
example.java:27: error: unclosed string literal
p_schema_name varchar2(400):= up
per('" + schema + "');
^
example.java:27: error: not a statement
p_schema_name varchar2(400):= up
per('" + schema + "');
^
example.java:28: error: ';' expected
l_owner varchar2(400);
^
example.java:29: error: ';' expected
l_object_name varchar2(400);
^
example.java:30: error: ';' expected
cursor c1_views is
^
example.java:31: error: ';' expected
select
^
example.java:32: error: not a statement
owner,
^
example.java:32: error: ';' expected
owner,
^
example.java:34: error: ';' expected
from dba_objects
^
example.java:35: error: ';' expected
where object_type in (''
VIEW'')
^
example.java:35: error: ';' expected
where object_type in (''
VIEW'')
^
example.java:35: error: empty character literal
where object_type in (''
VIEW'')
^
example.java:35: error: unclosed character literal
where object_type in (''
VIEW'')
^
example.java:35: error: empty character literal
where object_type in (''
VIEW'')
^
example.java:35: error: not a statement
where object_type in (''
VIEW'')
^
example.java:35: error: unclosed character literal
where object_type in (''
VIEW'')
^
example.java:36: error: empty character literal
and status = ''INVALID''
^
example.java:36: error: unclosed character literal
and status = ''INVALID''
^
example.java:36: error: empty character literal
and status = ''INVALID''
^
example.java:36: error: illegal line end in character literal
and status = ''INVALID''
^
example.java:39: error: ';' expected
open c1_views;
^
example.java:39: error: not a statement
open c1_views;
^
example.java:41: error: ';' expected
fetch c1_views into l_ow
ner, l_object_name;
^
example.java:41: error: ';' expected
fetch c1_views into l_ow
ner, l_object_name;
^
example.java:41: error: not a statement
fetch c1_views into l_ow
ner, l_object_name;
^
example.java:41: error: ';' expected
fetch c1_views into l_ow
ner, l_object_name;
^
example.java:41: error: not a statement
fetch c1_views into l_ow
ner, l_object_name;
^
example.java:42: error: '(' expected
if c1_views%notfound the
n
^
example.java:42: error: ')' expected
if c1_views%notfound the
n
^
example.java:43: error: variable declaration not allowed here
exit;
^
example.java:45: error: unclosed character literal
execute immediat
e 'alter view '||l_owner||'.'||l_object_name||' compile ';
^
example.java:45: error: variable declaration not allowed here
execute immediat
e 'alter view '||l_owner||'.'||l_object_name||' compile ';
^
example.java:45: error: unclosed character literal
execute immediat
e 'alter view '||l_owner||'.'||l_object_name||' compile ';
^
example.java:45: error: unclosed character literal
execute immediat
e 'alter view '||l_owner||'.'||l_object_name||' compile ';
^
example.java:45: error: not a statement
execute immediat
e 'alter view '||l_owner||'.'||l_object_name||' compile ';
^
example.java:45: error: unclosed character literal
execute immediat
e 'alter view '||l_owner||'.'||l_object_name||' compile ';
^
example.java:45: error: not a statement
execute immediat
e 'alter view '||l_owner||'.'||l_object_name||' compile ';
^
example.java:46: error: not a statement
end if;
^
example.java:46: error: ';' expected
end if;
^
example.java:46: error: '(' expected
end if;
^
example.java:46: error: ')' expected
end if;
^
example.java:47: error: not a statement
end loop;
^
example.java:49: error: ';' expected
dbms_utility.compile_sch
ema(schema => p_schema_name);
^
example.java:49: error: illegal start of expression
dbms_utility.compile_sch
ema(schema => p_schema_name);
^
example.java:50: error: not a statement
end;
^
example.java:51: error: not a statement
end;");
^
example.java:51: error: unclosed string literal
end;");
^
51 errors
Any idea where I am making the mistake?
Thanks in advance.