在oracle中建立如下存储过程
create or replace procedure MoveTablespace(p_TableName in varchar2, p_TablespaceName in varchar2)
authid current_user is v_Cursor number;
v_DDLString varchar2(100);
v_NumRows integer;begin
v_Cursor := dbms_sql.open_cursor;
v_DDLString := 'alter table :Table_Name move tablespace :TablespaceName';
dbms_sql.parse(v_Cursor, v_DDLString, dbms_sql.native);
dbms_sql.bind_variable(v_Cursor, ':TableName', p_TableName);
dbms_sql.bind_variable(v_Cursor, ':TablespaceName', p_TablespaceName);
v_NumRows := dbms_sql.execute(v_Cursor);
dbms_output.put_line(v_NumRows || 'rows affected');
dbms_sql.close_cursor(v_Cursor);
exception
when others then
dbms_output.put_line('exception ocurred');
dbms_sql.close_cursor(v_Cursor);
end;编译通过,但在sqlplus中执行
exec movetablespace(cjdaold, whcj)
时出错
ERROR 位于第 1 行:
ORA-06550: 第 1 行, 第 22 列:
PLS-00357: 在此上下文中不允许表,视图或序列引用 'CJDAOLD'
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored请问怎么解决这个问题啊?
create or replace procedure MoveTablespace(p_TableName in varchar2, p_TablespaceName in varchar2)
authid current_user is v_Cursor number;
v_DDLString varchar2(100);
v_NumRows integer;begin
v_Cursor := dbms_sql.open_cursor;
v_DDLString := 'alter table :Table_Name move tablespace :TablespaceName';
dbms_sql.parse(v_Cursor, v_DDLString, dbms_sql.native);
dbms_sql.bind_variable(v_Cursor, ':TableName', p_TableName);
dbms_sql.bind_variable(v_Cursor, ':TablespaceName', p_TablespaceName);
v_NumRows := dbms_sql.execute(v_Cursor);
dbms_output.put_line(v_NumRows || 'rows affected');
dbms_sql.close_cursor(v_Cursor);
exception
when others then
dbms_output.put_line('exception ocurred');
dbms_sql.close_cursor(v_Cursor);
end;编译通过,但在sqlplus中执行
exec movetablespace(cjdaold, whcj)
时出错
ERROR 位于第 1 行:
ORA-06550: 第 1 行, 第 22 列:
PLS-00357: 在此上下文中不允许表,视图或序列引用 'CJDAOLD'
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored请问怎么解决这个问题啊?
解决方案 »
- REDHAT6.2下如何安装 oracle11g 64位?
- 请高手指点下SQL
- 求助:pro*c编译SQL时遇到的问题
- 菜鸟问题
- 大家来说说使用oracle里面怎样使用索引,提高sql执行速度?
- 通过事务插入数据出现 外键异常“找不到父项关键”
- 怎么用execute immediate返回纪录集
- 表中增加index能提高查询效率,此查询是在当where后的条件为index中的column时才能提高效率,还是对所有字段都能提高效率?谁能解释一下
- 请问在PL/SQL存储过程中,我定义了一个数组但不知怎么访问这个数组,用操作符[]竟然说语法错误,谁能解决。
- 谁能提供 oracel 7.3.2 下载。急!!!!!!!!
- 请问oracle中case...if怎么用在这里呀????谢了!!!
- 关于 PL/SQL 数组 清空(初始化)
create or replace procedure MoveTablespace(p_TableName in varchar2,
p_TablespaceName in varchar2)
authid current_user is v_Cursor number;
v_DDLString varchar2(100);
v_NumRows integer;begin
v_Cursor := dbms_sql.open_cursor; v_DDLString := 'alter table ' || p_TableName || ' move tablespace ' || p_TablespaceName;
dbms_output.put_line(v_DDLString);
dbms_sql.parse(v_Cursor, v_DDLString, dbms_sql.native); --v7
v_NumRows := dbms_sql.execute(v_Cursor);
dbms_output.put_line(v_NumRows || 'rows affected');
dbms_sql.close_cursor(v_Cursor);
exception
when others then
dbms_output.put_line('exception ocurred: '||sqlerrm);
dbms_sql.close_cursor(v_Cursor);
end;
begin
execute immediate 'alter table cjdaold move tablespace whcj';
end;
是可以的这说明有权限
估计是用变量作为表名的问题