查询给出无效字符(ORA-00911:无效字符)问题
Query is giving invalid character (ORA-00911: invalid character)issue
如果我执行下面的查询然后我得到 无效字符。
declare
sql_query varchar2(4000):='delete from ';
begin
for i in (
select table_name,column_name from User_tab_cols where column_name like '%PROFILE_ID' and table_name not like 'GSC%' and table_name not like '%BKP%' order by 1)
loop
sql_query :=sql_query ||i.table_name;
sql_query:=sql_query || ' where '||i.column_name ||' = ' ||32052721 ||';';
execute immediate sql_query;
commit;
end loop;
end;
请帮我解决这个问题。
非常感谢您的帮助。
我使用的是Oracle 11.2.0.4.0版本。
我想,您需要为循环的每次迭代启动 sql_query。例如,像这样:
declare
sql_query varchar2(4000);
begin
for i in (
select table_name,column_name from User_tab_cols where column_name like '%PROFILE_ID' and table_name not like 'GSC%' and table_name not like '%BKP%' order by 1)
loop
sql_query :='delete from ';
sql_query :=sql_query ||i.table_name;
sql_query:=sql_query || ' where '||i.column_name ||' = 32052721';
execute immediate sql_query;
commit;
end loop;
end;
试试这个:在您的动态字符串中有一个额外的“;
”。
这里:
sql_query:=sql_query || ' where '||i.column_name ||' = ' ||32052721
||';';
DECLARE
sql_query VARCHAR2 (4000) := 'delete from ';
BEGIN
FOR i
IN ( SELECT table_name, column_name
FROM User_tab_cols
WHERE column_name LIKE '%PROFILE_ID'
AND table_name NOT LIKE 'GSC%'
AND table_name NOT LIKE '%BKP%'
ORDER BY 1)
LOOP
sql_query := sql_query || i.table_name;
sql_query :=
sql_query || ' where ' || i.column_name || ' = ' || 32052721 ;
EXECUTE IMMEDIATE sql_query;
Sql_query:=' ';
COMMIT;
END LOOP;
END;
您需要在每个循环中重新初始化查询,并省略结尾的分号。
DECLARE
l_sql_query VARCHAR2 (2000);
BEGIN
FOR i IN ( SELECT table_name, column_name
FROM user_tab_cols
WHERE column_name LIKE '%PROFILE_ID'
AND table_name NOT LIKE 'GSC%'
AND table_name NOT LIKE '%BKP%'
ORDER BY 1)
LOOP
l_sql_query := ' delete from ' || i.table_name || ' where ' || i.column_name || ' = ' || 32052721;
EXECUTE IMMEDIATE l_sql_query;
COMMIT;
END LOOP;
END;
如果我执行下面的查询然后我得到 无效字符。
declare
sql_query varchar2(4000):='delete from ';
begin
for i in (
select table_name,column_name from User_tab_cols where column_name like '%PROFILE_ID' and table_name not like 'GSC%' and table_name not like '%BKP%' order by 1)
loop
sql_query :=sql_query ||i.table_name;
sql_query:=sql_query || ' where '||i.column_name ||' = ' ||32052721 ||';';
execute immediate sql_query;
commit;
end loop;
end;
请帮我解决这个问题。
非常感谢您的帮助。
我使用的是Oracle 11.2.0.4.0版本。
我想,您需要为循环的每次迭代启动 sql_query。例如,像这样:
declare
sql_query varchar2(4000);
begin
for i in (
select table_name,column_name from User_tab_cols where column_name like '%PROFILE_ID' and table_name not like 'GSC%' and table_name not like '%BKP%' order by 1)
loop
sql_query :='delete from ';
sql_query :=sql_query ||i.table_name;
sql_query:=sql_query || ' where '||i.column_name ||' = 32052721';
execute immediate sql_query;
commit;
end loop;
end;
试试这个:在您的动态字符串中有一个额外的“;
”。
这里:
sql_query:=sql_query || ' where '||i.column_name ||' = ' ||32052721 ||';';
DECLARE
sql_query VARCHAR2 (4000) := 'delete from ';
BEGIN
FOR i
IN ( SELECT table_name, column_name
FROM User_tab_cols
WHERE column_name LIKE '%PROFILE_ID'
AND table_name NOT LIKE 'GSC%'
AND table_name NOT LIKE '%BKP%'
ORDER BY 1)
LOOP
sql_query := sql_query || i.table_name;
sql_query :=
sql_query || ' where ' || i.column_name || ' = ' || 32052721 ;
EXECUTE IMMEDIATE sql_query;
Sql_query:=' ';
COMMIT;
END LOOP;
END;
您需要在每个循环中重新初始化查询,并省略结尾的分号。
DECLARE
l_sql_query VARCHAR2 (2000);
BEGIN
FOR i IN ( SELECT table_name, column_name
FROM user_tab_cols
WHERE column_name LIKE '%PROFILE_ID'
AND table_name NOT LIKE 'GSC%'
AND table_name NOT LIKE '%BKP%'
ORDER BY 1)
LOOP
l_sql_query := ' delete from ' || i.table_name || ' where ' || i.column_name || ' = ' || 32052721;
EXECUTE IMMEDIATE l_sql_query;
COMMIT;
END LOOP;
END;