数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

学在oracle数据库中插入特殊符号


发布日期:2021年05月07日
 
学在oracle数据库中插入特殊符号

oracle 特殊字符的插入

环境配置:

server:linux

db server: oracle

client os:windows pro

oracle client: oracle i

今天一个同事运行脚本向数据库中插入数据数据的格式如下:

SQL> ed

已写入文件 afiedtbuf

* insert into dept values(Jackey&&jjjddHZ);

SQL> /

输入 jjjdd 的值: dd

原值 : insert into dept values(Jackey&&jjjddHZ);

新值 : insert into dept values(JackeyddHZ);

insert into dept values(JackeyddHZ);

*

ERROR 位于第 行:

ORA: invalid character

结果发现到数据库中的数据和插入的数据不一致主要表现是在插入的字符串的中如果包括了&

&后面的字符就会丢失

后来发现了造成这种情况的原因因为&在sqlplusw中被定义为自定义变量标示符合因此&

符合后面的字符自然被解析为变量名字因为没有输入变量的值所以&后面的内容被认为是空的了

于是我检查了一下session中的设置发现

已用时间: : :

SQL> show all

appinfo为OFF并且已设置为SQL*Plus

arraysize

autocommit OFF

autoprint OFF

autorecovery OFF

autotrace OFF

blockterminator (hex e)

btitle OFF and 为下一条 SELECT 语句的前几个字符

cmdsep OFF

colsep

compatibility version NATIVE

concat (hex e)

copycommit

COPYTYPECHECK 为 ON

define OFF

describe DEPTH LINENUM OFF INDENT ON

echo OFF

editfile afiedtbuf

embedded OFF

escape OFF

用于或更多行的 FEEDBACK ON

flagger OFF

flush ON

heading ON

headsep | (hex c)

instance local

linesize

lno

loboffset

logsource

long

longchunksize

markup HTML OFF HEAD <style type=text/css> body {font:pt Ar

newpage

null

numformat

numwidth

pagesize

PAUSE 为OFF

pno

recsep WRAP

recsepchar (hex )

release

repfooter OFF and 为 NULL

repheader OFF and 为 NULL

serveroutput OFF

shiftinout INVISIBLE

showmode OFF

spool OFF

sqlblanklines OFF

sqlcase MIXED

sqlcode

sqlcontinue >

sqlnumber ON

sqlpluscompatibility

sqlprefix # (hex )

sqlprompt SQL>

sqlterminator ; (hex b)

suffix sql

tab ON

termout ON

time OFF

timing ON

trimout ON

trimspool OFF

ttitle OFF and 为下一条 SELECT 语句的前几个字符

underline (hex d)

USER 为SCOTT

verify ON

wrap : 行将为已换行

SQL>

在上面的输出中可以看到define参数被设置为on 后来我从新设置define为off(set define off);

重新执行插入语句运行结果如下:

SQL> CREATE TABLE TEST (

ID NUMBER () PRIMARY KEY

NAME VARCHAR ());

表已创建

已用时间: : :

SQL>

SQL> show define

define OFF

SQL> insert into test values(sgs&a&n);

已创建

已用时间: : :

SQL> select * from test;

ID NAME

sgs&a&n

已用时间: : :

结果显示插入&字符成功

后来我又在sqlplus直接运行居然也成功后来我检查了一下define的设置此时为 define on状态

可是为什么却可以插入了后来又把他设置为off同样可以插入成功因为我觉得sqlplus命令行是不支持

自定义变量因此可以插入成功而sqlplusw支持自定义变量所以一定要先设置过define off才可以

上一篇:Oracle 数据库中的 Empty String 处理

下一篇:oracle字段自增两段代码搞定