学习oracle

Oracle SQL 部分特殊字符转义及escape的用法

发表于2个月前(2014-02-25 16:15)   阅读( 65) | 评论( 0)  2人收藏此文章, 我要收藏
0
摘要  Oracle SQL escape

在处理sql时,遇到insert 或update 的参数中含有特殊字符“&”,下划线“_”, 单引号" ' "等时,要做转义处理。

例:插入特殊字元'&'
update userinfo set pageurl='myjsp?page=1&pagesize=10' where id='test'
两个办法:
1) update userinfo set pageurl='myjsp?page=1'||'&'||'pagesize=10' where id='test'
2) update userinfo set pageurl='myjsp?page=1'||chr(38)||'pagesize=10' where id='test'
注:其中 || 是连字符, chr(38)跟ASCII的字符转码是一致的。

例:搜索以“QA_”开头的数据 :
select CODE from CNT_CODELIST where code like 'QA_%'
结果为:QA_OFFICER_1,QA_OFFICER_2,QA112
不符合,必须把下划线转义
select CODE from CNT_CODELIST where code like 'QA/_%'escape '/'
结果为:QA_OFFICER_1,QA_OFFICER_2

转义字符 % 处理手法如&

转义字符 ’单引号    在PL/SQL里两个单引号等于一个单引号

补充:
SQL中escape的用法
使用 ESCAPE 关键字定义转义符。 在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。
例如,要搜索在任意位置包含字符串 5% 的字符串: WHERE ColumnA LIKE '%5/%%' ESCAPE '/' 
前后两个%作为通配符使用,中间的%经过ESCAPE 转义,作为普通字符使用


sqlplus中查看Oracle中有好些已经创建好的用户

select   username   from   dba_users

在Oracle中查看所有的表:

select * from tab/dba_tables/dba_objects/cat;

看用户建立的表   : 

select table_name from user_tables;  //当前用户的表

select table_name from all_tables;  //所有用户的表

select table_name from dba_tables;  //包括系统表


1,查询结果分行显示不好看,但是每次都SET LINESIZE又太麻烦;

1,找到安装目录下的\sqlplus\admin\glogin.sql(我的:D:\myProgram\Oracle10\sqlplus\admin\glogin.sql) 
 
      2,编辑文件,在最后添加: 
           define _editor=notepad 
         set pagesize 9999 
         set linesize 200 

2、SQLplus命令打错了怎样修改:

用SQL*PLUS命令EDIT可以编辑刚刚输入的语句。
例:SQL>edit回车
回到SQL>打一个斜杠/就可以运行了。

安装完oracle数据库,第一次使用SQL plus边接数据库时,要求输入用户名,口令,主机字符串:我的分别为SYSTEM, SYSTEM(安装时自己设定的口令),orcl

ORACLE实例 = 进程 + 进程所使用的内存(SGA)。

实例是一个临时性的东西,你也可以认为它代表了数据库某一时刻的状态!
数据库 = 重做文件 + 控制文件 + 数据文件 + 临时文件
数据库是永久的,是一个文件的集合。

一个实例在其生存期内只能装载和打开一个数据库,而一个数据库可以由可以由多个实例装载。

每一个Oracle数据库是由三种类型的文件组成:数据文件、日志文件和控制文件。数据库的文件为数据库信息提供真正的物理存储

数据文件通常为*.dbf格式,数据文件有下列特征:①、一个数据文件仅与一个数据库联系;②、一旦建立,数据文件只增不减;③、一个表空间(数据库存储的逻辑单位)由一个或多个数据文件组成。Oracle的逻辑结构:Oracle的逻辑结构包括表空间(tablespace),段(segment),数据块(data block)以及模式对象(schema object)。Oracle数据库在逻辑上是由多个表空间组成的,表空间在物理上包含一个或多个数据文件。而数据文件大小是块大小的整数倍;表空间中存储的对象叫段,比如数据段,索引段和回退段。段由区组成,区是磁盘分配的最小单位。段的增大是通过增加区的个数来实现的。每个区的大小是数据块大小的整数倍,区的大小可以不相同;数据块是数据库中的最小的I/O单位,同时也是内存数据缓冲区的单位,及数据文件存储空间单位。块的大小由参数DB_BLOCK_SIZE设置,其值应设置为操作系统块大小的整数倍。

 ⑴、表空间(tablespace)
   表空间是数据库中最大的逻辑单位,每一个表空间由一个或多个数据文件组成,一个数据文件只能与一个表空间相联系。每一个数据库都有一个SYSTEM表空间,该表空间是在数据库创建或数据库安装时自动创建的,用于存储系统的数据字典表,程序系统单元,过程函数,包和触发器等,也可用于存储用户数据表,索引对象。表空间具有在线(online)和离线(offline)属性,可以将除SYSTME以外的其他任何表空间置为离线。
   ⑵、段(segment)
   数据库的段可以分为四类:数据段、索引段、回退段和临时段。
   ⑶、区
   区是磁盘空间分配的最小单位。磁盘按区划分,每次至少分配一个区。区存储与段中,它由连续的数据块组成。
   ⑷、数据块
   数据块是数据库中最小的数据组织单位与管理单位,是数据文件磁盘存储空间单位,也是数据库I/O的最小单位,数据块大小由DB_BLOCK_SIZE参数决定,不同的Oracle版本DB_BLOCK_SIZE的默认值是不同的。
   ⑸、模式对象
   模式对象是一种应用,包括:表、聚簇、视图、索引序列生成器、同义词、哈希、程序单元、数据库链等。 
   最后,在来说一下Oracle的用户、表空间和数据文件的关系:
   一个用户可以使用一个或多个表空间,一个表空间也可以供多个用户使用。用户和表空间没有隶属关系,表空间是一个用来管理数据存储的逻辑概念,表空间只是和数据文件发生关系,数据文件是物理的,一个表空间可以包含多个数据文件,而一个数据文件只能隶属一个表空间。 
   总结:解释数据库、表空间、数据文件、表、数据的最好办法就是想象一个装满东西的柜子。数据库其实就是柜子,柜中的抽屉是表空间,抽屉中的文件夹是数据文件,文件夹中的纸是表,写在纸上的信息就是数据。


建表(Create table)语法详解
1. ORACLE常用的字段类型
ORACLE常用的字段类型有
VARCHAR2 (size) 可变长度的字符串, 必须规定长度
CHAR(size) 固定长度的字符串, 不规定长度默认值为1
NUMBER(p,s) 数字型p是位数总长度, s是小数的长度, 可存负数
最长38位. 不够位时会四舍五入.
DATE 日期和时间类型
LOB 超长字符, 最大可达4G
CLOB 超长文本字符串
BLOB 超长二进制字符串
BFILE 超长二进制字符串, 保存在数据库外的文件里是只读的.

数字字段类型位数及其四舍五入的结果
原始数值1234567.89
数字字段类型位数 存储的值
Number 1234567.89
Number(8) 12345678
Number(6) 错
Number(9,1) 1234567.9
Number(9,3) 错
Number(7,2) 错
Number(5,-2) 1234600
Number(5,-4) 1230000
Number(*,1) 1234567.9

2. 创建表时给字段加默认值 和约束条件
创建表时可以给字段加上默认值
例如 : 日期字段 DEFAULT SYSDATE
这样每次插入和修改时, 不用程序操作这个字段都能得到动作的时间

创建表时可以给字段加上约束条件
例如: 非空 NOT NULL
不允许重复 UNIQUE
关键字 PRIMARY KEY
按条件检查 CHECK (条件)
外键 REFERENCES 表名(字段名)

3. 创建表的例子
CREATE TABLE DEPT(
EPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14),
LOC VARCHAR2(13)) ;

CREATE TABLE region(
ID number(2) NOT NULL PRIMARY KEY,
postcode number(6) default '0' NOT NULL,
areaname varchar2(30) default ' ' NOT NULL);


Oracle话题二:sqlplus常用命令

**如何在XP的cmd命令行状态下输入中文?
 1.开始-》运行中输入regedit

 2.HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe下的项CodePage项值改为十进制"936"值或 
 十六进制"000003a8"值。说明一下: 十六进制"000003a8"或十进制"936",表示"936 (ANSI/OEM - 简体中文 GBK)"。 
 
**启动oracle服务:net start OracleServicesid    其中sid是服务器的名
**查看ORACLE的实例: select * from v$instance
**查看ORACLE的数据库名:select * from v$database;

** startup,等于以下三个命令   
      startup   nomount   
      alter   database   mount   
      alter   database   open

**<打开控制台输出> 1、show all serveroutput OFF 2、set serveroutput on 启动及关闭模式

**关闭oracle数据库
 shut down
**查看数据库名
 实例名:
 select * from v$instance;
 数据库名:
 select * from v$database;
**查看oracle中的所有表:
 SELECT * FROM dba_tables
**oracle忘记sys密码解决
 这个其实很简单,不过自己经常忘记,所以记下来
  sqlplus /nolog; 
    connect / as sysdba 
  alter user sys identified by ; 
    alter user system identified by ;
**创建用户:
 create user username(用户名)
  identified by userpassword(用户密码)
  default tablespace system
  quota 5M on system  -----供用户使用的最大空间限制
  
**查看用户及其密码:
 select username,password from dba_users;
**修改用户system密码为manager
 alter user system identified by manager;

**删除用户及其所建的实体:
 DROP USER jxzy CASCADE;
**授予用户的系统特权:
 grant create session,create table to username;
 GRANT CREATE USER,ALTER USER,DROP USER 
 TO jxzy_new  --用户名
 WITH ADMIN OPTION;
**回收系统特权:(注意没有级联回收的功能)
 REVOKE CREATE USER,ALTER USER,DROP USER 
 FROM jxzy_new
**显示某个用户在oracle中所授的系统特权
 SELECT * FROM sys.dba_sys_privs
**oracle对象的管理和控制:
 oracle对象特权:用户在指定的表上进行特殊操作的权利。这些特殊操作包括增、删、改、查看、执行(存储过程)、
 引用(其它表字段作为外键)、索引等。  
 授权:
  GRANT SELECT,INSERT(office_num,office_name), --针对某个表某个列进行授权
  UPDATE(desc)ON office_organization,
  TO new_adminidtrator(用户名),
  WITH GRANT OPTION;
  
  级联授权:
  grant all on office_organization
  to new_administrator
 回收:
  revoke update on office_organization
  from new_administrator;
 显示:
  select * from sys.dba_tab_privs;
**oracle中的角色管理:
 分类:(5种)
  CONNECT:具有创建表、视图、序列等特权;
  RESOURCE:具有创建过程、触发器、表、序列等特权
  DBA:DBA具有全部系统特权;
  EXP_FULL_DATABASE:具有卸出数据库的特权
  IMP_FULL_DATABASE:装入数据库的特权
 查看每种角色所拥有的权利:
  select * from sys.dba_sys_privs;
 授予用户角色:
  grant dba(角色类) to new_administrator(用户名)
  with grant option;
**oracle的用户安全:
 1、由于Oracle有几个系统预建的用户,所以最好在安装完成以后马上改变这些用户的密码。
  系统默认得密码分别为:internal/oracle , sys/change_on_install, system/manager. 
 2、当选择密码文件认证方式时,可以再向系统中加入其他超级用户。
  比如用以下语句把用户SCOTT加入超级用户之中:(由具有sysdba权限的人执行) 
  GRANT SYSDBA TO SCOTT;这样SCOTT用户就具有了sysdba权限。
  注意:此时SCOTT用户可以以两种身份登录:SCOTT , SYS.当SCOTT在登录时没有输入AS SYSDBA时,
  SCOTT是作为普通用户登录的。而当登录时输入了AS SYSDBA时,此时SCOTT登录进去的用户实际上为sys。
 3、当前系统中的具有sysdba权限的用户名可以从数据字典视图v$pwfile_user中查询得到: 
  SELECT * FROM V$PWFILE_USERS;
 4、系统中最大的具有sysdba权限的用户数由创建密码文件时的ENTRIES参数决定。
  当需要创建更多的具有sysdba权限的用户时,就需要删除原有的密码文件,重新创建一个。
  这需要关闭数据库,删除密码文件,重新创建一个新的密码文件,在entries中输入足够大的数目。
  再启动Oracle。这时,所有原来北授权的超级用户都不再存在,需要重新授权。
  所以在重新创建密码文件前,先要查询该视图,记下用户名,再在创建完密码文件后重新授权。
 5、Internal用户密码忘记的处理方法: 
  有两种办法: 
  1)、ALTER USER SYS IDENTIFIED BY 新密码;//这同时也改变了Internal的密码,在Oracle8I中通过 
  2)、重新创建一个新的密码文件,指定一个新的密码。

**查看某个用户中的表:
 SELECT * FROM USER_TABLES
**在Oracle中查看所有的表: 
 select * from tab/dba_tables/dba_objects/cat; 
 看用户建立的表   : 
 select table_name from user_tables;  //当前用户的表   
 select table_name from all_tables;  //所有用户的表       
 select table_name from dba_tables;  //包括系统表     show user;//当前用户
 
**乱码:
 字符集不一致,保证服务器端的字符集和client的字符集一致即可,服务器端的字符集一旦建库就基本上不能修改了,
 可以用 select userenv('language') from dual查看,client的字符集只需要在bash_profile变量里面export 
 LANG和NLS_LANG即可。当然shell的字符集最好也保持一致,编辑文件/etc/sysconfig/i18n。如果远程登陆的话,
 登陆软件如scurityCRT或者PUTTY的字符集设定也应该一致。


1.sqlplus : 登陆SQL
 清屏:HOST CLS 
2.exit: 退出SQL
3.clear buffer : 清空缓冲区内容。
4.describe:描述表结构 ,缩写为desc。
5.list:用来显示缓冲区的内容,缓冲区只保存最近一条SQL或PL SQL命令,缩写为l。
6./ :执行缓冲区的SQL语句 /=run
7.change /old /new  :将旧串的内容改变为新串的内容。缩写为c。/可以换成其它的特殊符号,只有前后一致就  OK了。
 如:change ?old ?new
8.append  new :追加,将新串追加到行尾。 缩写为a
9.save filename [replace]: 将缓冲区的SQL语句保存成文件。使用可选参数replace可以覆盖原文件的内容。
10.get filename: 将SQL文件取到缓冲区
11.start filename: 执行SQL文件 ,相当于get filename +/ 
12.@ filename: 执行SQL文件,等价于start filename
13.edit filename: 编辑缓冲区的SQL语句。
14.spool filename: 用来保存在SQL*Plus工具中操作过的内容,记得之后要使用spool off。要不它只会停留在使 
 用spool filename命令的点上,不会保存到内容
15.help index: 显示所有SQL*Plus命令。Help 命令名,显示这条命令的信息
16.column : 预定义列格式,后面可以放名列或列的别名。
17.修改缓冲区内容的三种方法:
 (1)a. 输入要修改的行数,回车,b. 使用命令change /old /new 
 (2)输入要修改的行数,然后直接重写整一句的内容。
 (3)用edit命令,进入vi编辑。
18.定义变量
 用&来定义变量。可以放在任何地方,执行时,用输入的值替换变量的值
 如:select &name from emp;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值