网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.如何处理Oracle中TEMP表空间满的.
.教你在Oracle中通过网络连接导入.
.MSSQL7.0SysbaseAccess向Oracle8.
.在freebsd下安装oracle.
.Oracle数据库备份与恢复之日志备.
.Oracle DBA 常用Scripts(第一部.
.SQLPlus命令使用指南(二) enh.
.性能调优:Oracle9iR2 NF:压缩表技.
.如何在grub中指定内存大小.
.调整Oracle数据库服务器的性能.
.Oracle-常用监控SQL.
.教你如何重建Oracle数据库的回滚.
.Oracle10g支持SQL正则表达式.
.介绍几个基本的 SQLPLUS 命令.
.自动运行管理任务──作业.
.ORA-19550问题及ORA-00106问题.
.介绍使用数据库保存session的方法.
.Decode()函数.
.高效解析XML.
.Oracle9i 数据库管理实务讲座(二.

oracle数据库中插入特殊符号&

发表日期:2008-2-9



  
Oracle 非凡字符的插入

环境配置:
server:Linux9
db server: oracle817.4
client os:windows2000 pro
oracle client: oracle 9i


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

SQL> ed
已写入文件 afiedt.buf

  1* insert into dept values(92,'Jackey&&jjjdd','HZ');
SQL> /
输入 jjjdd 的值:  dd
原值    1: insert into dept values(92,'Jackey&&jjjdd','HZ');
新值    1: insert into dept values(92,'Jackeydd','HZ');
insert into dept values(92,'Jackeydd','HZ');
                                           *
ERROR 位于第 1 行:
ORA-00911: invalid character

结果发现到数据库中的数据和插入的数据不一致.主要表现是在插入的字符串的中假如包括了'&',
则'&'后面的字符就会丢失.
后来发现了造成这种情况的原因.因为'&'在sqlplusw中被定义为自定义变量标示符合,因此'&'
符合后面的字符自然被解析为变量名字.因为没有输入变量的值,所以'&'后面的内容被认为是空的了.
于是,我检查了一下session中的设置发现.
----------------------------------------------------------------------------------
已用时间:  00: 00: 00.00
SQL> show all
appinfo为OFF并且已设置为"SQL*Plus"
arraysize 15
autocommit OFF
autoprint OFF
autorecovery OFF
autotrace OFF
blockterminator "." (hex 2e)
BTitle OFF and 为下一条 SELECT 语句的前几个字符
cmdsep OFF
colsep " "
compatibility version NATIVE
concat "." (hex 2e)
copycommit 0
COPYTYPECHECK 为 ON
define OFF
describe DEPTH 1 LINENUM OFF INDENT ON
echo OFF
editfile "afiedt.buf"
embedded OFF
escape OFF
用于6或更多行的 FEEDBACK ON
flagger OFF
flush ON
heading ON
headsep "" (hex 7c)
instance "local"
linesize 500
lno 9
loboffset 1
logsource ""
long 80
longchunksize 80
markup Html OFF HEAD "<style type='text/Css'> body {font:10pt Ar
newpage 1
null ""
numformat ""
numwidth 10
pagesize 14
PAUSE 为OFF
pno 1
recsep WRAP
recsepchar " " (hex 20)
release 801070400
repfooter OFF and 为 NULL
repheader OFF and 为 NULL
serveroutput OFF
shiftinout INVISIBLE
showmode OFF
spool OFF
sqlblanklines OFF
sqlcase MIXED
sqlcode 0
sqlcontinue "> "
sqlnumber ON
sqlpluscompatibility 8.1.7
sqlprefix "#" (hex 23)
sqlprompt "SQL> "
sqlterminator ";" (hex 3b)
suffix "sql"
tab ON
termout ON
time OFF
timing ON
trimout ON
trimspool OFF
ttitle OFF and 为下一条 SELECT 语句的前几个字符
underline "-" (hex 2d)
USER 为"SCOTT"
verify ON
wrap : 行将为已换行
SQL>
----------------------------------------------------------------------------------
在上面的输出中,可以看到define参数被设置为on. 后来我从新设置define为off(set define off);
重新执行插入语句,运行结果如下:
SQL>  CREATE TABLE TEST3 (
  2  ID NUMBER (2) PRIMARY KEY,
  3  NAME VARCHAR2 (20));

表已创建。


已用时间:  00: 00: 00.02
SQL>
SQL> show define
define OFF
SQL> insert into test3 values(2,'sgs&a&n');

已创建 1 行。

已用时间:  00: 00: 00.00
SQL> select * from test3;

        ID NAME
---------- ----------------------------------------
         2 sgs&a&n

已用时间:  00: 00: 00.00

结果显示,插入'&'字符成功.

后来,我又在sqlplus直接运行,居然也成功.后来我检查了一下define的设置,此时为 define on状态.
可是为什么却可以插入了.后来又把他设置为off,同样可以插入成功.因为我觉得sqlplus命令行是不支持
自定义变量,因此可以插入成功.而sqlplusw支持自定义变量,所以一定要先设置过define off才可以.
上一篇:oracle中变异表触发器的处理。 人气:1128
下一篇:oracle 数据分页查询 人气:1141
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐