执行 oracle 更改查询时出现错误:ORA-01756:引用的字符串未正确终止
Posted
技术标签:
【中文标题】执行 oracle 更改查询时出现错误:ORA-01756:引用的字符串未正确终止【英文标题】:While executing oracle alter query getting error : ORA-01756: quoted string not properly terminated 【发布时间】:2021-07-13 13:19:51 【问题描述】:我正在尝试在我的 .sql 文件中执行以下查询并收到错误:
引用的字符串没有正确终止
execute immediate 'alter tablespace '||tname||' add datafile '''||file_name||lname||ext||''' size '||add_space||'m autoextend off maxsize 30720m';
新代码:
set serveroutput on;
set linesize 200
set head off;
set feedback off;
DECLARE
chr integer(12);
tname varchar (50):='$i'; # Value I am getting from linux
file_name varchar (500);
add_space integer(10):=$fiftin_per;
m_point varchar(200):=$mount_name;
var varchar(10):='/';
stamp varchar(50):='$random_val';
ext varchar:='.dbf'
BEGIN
file_name:=m_point||var||tname||stamp||ext;
dbms_output.put_line(file_name);
#op : \oradata\data\test14_7_2021.dbf
dbms_output.put_line('alter tablespace '||tname||' add datafile '||file_name||' size '||add_space||'m autoextend off');
#op : alter tablespace test add datafile \oradata\data\test14_7_2021.dbf size 302m autoextend off
dbms_output.put_line('alter tablespace '||tname||' add datafile "'||file_name||'" size '||add_space||'m autoextend off');
#op :alter tablespace test add " datafile \oradata\data\test14_7_2021.dbf" size 302m autoextend off
dbms_output.put_line('alter tablespace '||tname||' add datafile '''||file_name||''' size '||add_space||'m autoextend off');
#op :alter tablespace test add datafile ' \oradata\data\test14_7_2021.dbf' size 302m autoextend off
END;
/
我尝试了三种不同的方式来打印该命令并给出了文件的输出,请提出建议。
【问题讨论】:
可以使用dbms_output
调试生成的语句。但是,该行不会引发该错误,除非您以某种方式将单引号嵌入到您用来构造它的变量之一中;或者如果(因为它没有分号)以下行继续命令并且有一些额外/缺失的东西。该语句无效,因为您不能将maxsize
设置为autoextend off
,而是that isn't the error that generates。
您的变量中是否有单引号?
@AlexPoole :我已经按照您的建议使用 dbms_output 解决了这个问题,但现在问题是我将文件名从 linux 传递到 oracle 查询,该查询在文件名之前占用一个空格,并且在运行查询时我我收到无效的文件名错误。我试图传递不带引号的文件名,它工作正常,但带引号它不起作用。请参阅我的第二条评论中的以下示例:
@AlexPoole : 1. 不带引号 : dbms_output.put_line( 'alter tablespace '||tname||' add datafile '||file_name||' size '||add_space||'m autoextend off'); OP : alter tablespace SYSAUX add datafile /oradata01/POCDB/data/SYSAUX112917893.dbf size 136m autoextend off
2. 不带引号 : dbms_output.put_line( 'alter tablespace '||tname||' add datafile '''||file_name||''' size '||add_space||'m autoextend off'); OP : alter tablespace SYSAUX add datafile ' oradata01/POCDB/data/SYSAUX112917893.dbf' size 136m autoextend off
#它在第一个引号后添加一个空格,这是不需要的。
@Jameson_uk :是的,我声明了一个变量来打印单引号,删除后问题已解决,但现在又遇到了另一个问题。
【参考方案1】:
我已使用以下代码解决了我的问题:我在 linux 中修剪了文件名,然后将该值传递给 oracle:
var='/'
random_val=`date +"%d_%m_%y"_"%H"_"%M"_"%S"`
ex=".dbf";
fname="$mount_name$var$i$random_val$ex"
ac=`echo -e "$fname" | tr -d '[:space:]'` # Trimmed filename
echo $ac
output3=`sqlplus -s usr/usr as sysbackup <<END2
set serveroutput on;
set linesize 200
set head off;
set feedback off;
DECLARE
tname varchar (50):='$i';
file_name varchar (500):='$ac';
add_space integer(10):=$fiftin_per;
BEGIN
dbms_output.put_line('alter tablespace '||tname||' add datafile '''||file_name||''' size '||add_space||'m autoextend off');
#op: alter tablespace test add datafile /oradata1/data/test12345.dbf size 1208m autoextend off;
dbms_output.put_line('We have added :'||file_name);
#op: We have added/oradata1/data/test12345.dbf
END;
/
exit;
END2`
【讨论】:
以上是关于执行 oracle 更改查询时出现错误:ORA-01756:引用的字符串未正确终止的主要内容,如果未能解决你的问题,请参考以下文章
ORACLE PL/SQL 在查询 3 列信息时出现存储过程错误
使用 EclipseLink 在 Oracle 上执行查询时出现奇怪的行为
使用 `getclobval()` 执行 oracle 程序时出现“无效字符错误”