oracle语法大全
oracle function 语法
oracle function 语法【1】Oracle Function 简介在Oracle 数据库中,Function 是一种存储过程,它允许你执行一系列的操作,并在过程中返回一个值。
Oracle Function 可以用于处理复杂的业务逻辑,并将结果返回给调用者。
它们提供了更高的灵活性和可重用性,使得开发者可以更高效地管理数据库。
【2】Oracle Function 语法结构Oracle Function 的基本语法结构如下:```CREATE OR REPLACE FUNCTION function_nameRETURN return_typeIS-- 声明变量和常量-- 声明过程变量BEGIN-- 业务逻辑RETURN return_value;END;/```其中,`function_name` 是函数的名称,`return_type` 是返回值的类型,`return_value` 是实际返回的值。
【3】参数传递Oracle Function 允许你通过参数传递数据。
参数可以在声明函数时定义,也可以在调用函数时传递。
定义参数的语法如下:```FUNCTION function_name(param1 data_type, param2 data_type, ...) RETURN return_type;```【4】返回值Oracle Function 可以通过`RETURN` 语句返回一个值。
返回值可以是任意数据类型,包括字符、数字、日期等。
以下是一个返回值的示例:```FUNCTION calculate_area(p_radius IN NUMBER)RETURN NUMBERISv_area NUMBER;BEGINv_area := POWER(p_radius, 2);RETURN v_area;END;/```【5】示例:创建一个简单的Oracle Function以下是一个计算圆面积的Function 示例:```FUNCTION calculate_area(p_radius IN NUMBER) RETURN NUMBERISv_area NUMBER;BEGINv_area := POWER(p_radius, 2);RETURN v_area;END;/```调用此Function 的SQL 语句如下:```SELECT calculate_area(5) FROM dual;```以上内容仅供参考,实际操作请根据具体需求和场景进行调整。
oracle语法大全
第一篇基本操作--解锁用户alter user 用户account unlock;--锁定用户alter user 用户account lock;alter user scott account unlock;--创建一个用户yc 密码为a create user 用户名identified by 密码;create user yc identified by a;--登录不成功,会缺少create session 权限,赋予权限的语法grant 权限名to 用户;grant create session to yc;--修改密码alter user 用户名identified by 新密码;alter user yc identified by b;--删除用户drop user yc ;--查询表空间select *from dba_tablespaces;--查询用户信息select *from dba_users;--创建表空间create tablespace ycspacedatafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf'size 2mautoextend on next 2m maxsize 5moffline ;--创建临时表空间create temporary yctempspacetempfile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf'size 2mautoextend on next 2m maxsize 5moffline ;--查询数据文件select *from dba_data_files;--修改表空间--1、修改表空间的状态--默认情况下是online,只有在非离线情况下才可以进行修改alter tablespace ycspace offline ; --离线状态,不允许任何对象对该表空间的使用,使用情况:应用需要更新或维护的时候;数据库备份的时候alter tablespace ycspace read write;--读写状态alter tablespace ycspace online;alter tablespace ycspace read only; --只读,可以查询信息,可以删除表空间的对象,但是不能创建对象和修改对象。
Oracle存储过程语法与注意事项
oracle 存储过程的基本语法1.基本结构CREATE OR REPLACE PROCEDURE 存储过程名字(参数1 IN NUMBER,参数2 IN NUMBER) IS变量1 INTEGER :=0;变量2 DATE;BEGINEND 存储过程名字2.SELECT INTO STA TEMENT将select查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DA TA_FOUND)例子:BEGINSELECT col1,col2 into 变量1,变量2 FROM typestruct where xxx; EXCEPTIONWHEN NO_DATA_FOUND THENxxxx;END;...3.IF 判断IF V_TEST=1 THENBEGINdo somethingEND;END IF;4.while 循环WHILE V_TEST=1 LOOPBEGINXXXXEND;END LOOP;5.变量赋值V_TEST := 123;6.用for in 使用cursor...ISCURSOR cur IS SELECT * FROM xxx;BEGINFOR cur_result in cur LOOPBEGINV_SUM :=cur_result.列名1+cur_result.列名2END;END LOOP;END;7.带参数的cursorCURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;OPEN C_USER(变量值);LOOPFETCH C_USER INTO V_NAME;EXIT FETCH C_USER%NOTFOUND;do somethingEND LOOP;CLOSE C_USER;8.用pl/sql developer debug连接数据库后建立一个Test WINDOW在窗口输入调用SP的代码,F9开始debug,CTRL+N单步调试关于oracle存储过程的若干问题备忘1.在oracle中,数据表别名不能加as,如:select a.appname from appinfo a;-- 正确select a.appname from appinfo as a;-- 错误也许,是怕和oracle中的存储过程中的关键字as冲突的问题吧2.在存储过程中,select某一字段时,后面必须紧跟into,如果select整个记录,利用游标的话就另当别论了。
oracle if 语法
oracle if 语法Oracle IF语法详解一、引言Oracle是一种关系型数据库管理系统,提供了丰富的SQL语法来操作数据库。
其中,IF语法是一种常用的条件语句,用于根据条件判断执行不同的操作。
本文将详细介绍Oracle IF语法的使用方法和注意事项。
二、IF语法的基本用法IF语法的基本结构如下:IF 条件 THEN执行操作1;ELSE执行操作2;END IF;其中,条件是一个逻辑表达式,用于判断是否满足某个条件。
如果条件为真,则执行操作1;如果条件为假,则执行操作2。
三、IF语法的扩展用法除了基本的IF语法外,Oracle还提供了一些扩展用法,以满足更复杂的条件判断需求。
1. IF-ELSIF-ELSE结构如果需要判断多个条件,可以使用IF-ELSIF-ELSE结构。
示例如下:IF 条件1 THEN执行操作1;ELSIF 条件2 THEN执行操作2;ELSE执行操作3;END IF;在这种结构中,条件1为真时执行操作1;条件1为假,条件2为真时执行操作2;条件1和条件2都为假时执行操作3。
2. IF-THEN-ELSEIF-ELSE结构如果需要判断多个条件,并且每个条件都需要执行不同的操作,可以使用IF-THEN-ELSEIF-ELSE结构。
示例如下:IF 条件1 THEN执行操作1;ELSEIF 条件2 THEN执行操作2;ELSEIF 条件3 THEN执行操作3;ELSE执行操作4;END IF;在这种结构中,条件1为真时执行操作1;条件1为假,条件2为真时执行操作2;条件1和条件2都为假,条件3为真时执行操作3;条件1、条件2和条件3都为假时执行操作4。
3. IF-THEN嵌套结构在某些情况下,可能需要嵌套使用IF-THEN语句来实现更复杂的条件判断。
示例如下:IF 条件1 THENIF 条件2 THEN执行操作1;ELSE执行操作2;END IF;ELSE执行操作3;END IF;在这种结构中,条件1为真时,进一步判断条件2是否为真,如果条件2为真则执行操作1,否则执行操作2;条件1为假时执行操作3。
Oracle数据库语法总结
Oracle数据库语法总结一、DDL(数据定义语言)1、创建、删除表(1)CREATE TABLE 语句用于在Oracle数据库中创建新表:CREATETABLE表名(列1数据类型(大小/长度)[NOTNULL][CONSTRAINT约束名]列2数据类型(大小/长度)[NOTNULL][CONSTRAINT约束名]……(2)DROP TABLE 语句用于从Oracle数据库中删除表:DROPTABLE表名2、更改表(1)ALTERTABLE语句用于更改现有的表:ALTERTABLE表名ADD(添加新的列),MODIFY(修改现有的列),DROP(删除现有的列)(2)RENAME语句用于更改表名:RENAME表名1TO表名23、创建索引(1)CREATEINDEX语句用于在表中创建索引:CREATEINDEX索引名ON表名(列1,列2,...)(2)DROPINDEX语句用于从表中删除索引:DROPINDEX索引名4、创建约束(1)Primary Key 约束:ALTERTABLE表名ADDCONSTRAINT主键名PRIMARYKEY(列名)(2)Foreign Key约束:ALTERTABLE表名ADDCONSTRAINT外键名FOREIGNKEY(列名)REFERENCES参照表名(参照列);(3)Unique 约束:ALTERTABLE表名ADDCONSTRAINT唯一约束名UNIQUE(列1,列2,...);(4)NOTNULL约束:ALTERTABLE表名ADDCONSTRAINT非空约束名NOTNULL(列1,列2,...);5、删除约束(1)Primary Key 约束:ALTERTABLE表名DROPCONSTRAINT主键名PRIMARYKEY;(2)Foreign Key约束:ALTERTABLE表名DROPCONSTRAINT外键名FOREIGNKEY;(3)Unique 约束:。
oracle的正则表达式语法
oracle的正则表达式语法Oracle的正则表达式语法正则表达式在计算机编程中是非常重要的,它可以帮助我们轻松地匹配、查找和替换文本中的特定字符序列。
Oracle数据库也支持正则表达式,因此,本文将介绍Oracle的正则表达式语法。
1. 字符类:正则表达式中的字符类可以表示一组字符中的任何一个字符。
在Oracle中,我们可以使用方括号([])来表示字符类,如下所示:[abc]:表示a、b或c中的任何一个字符。
[^abc]:表示除a、b或c以外的任何一个字符。
[a-z]:表示从a到z中的任何一个小写字母。
[A-Z]:表示从A到Z中的任何一个大写字母。
[0-9]:表示从0到9中的任何一个数字。
2. 元字符:正则表达式中的元字符有特殊的含义,可以用来表示空格、数字、特殊字符等。
在Oracle中,我们可以使用以下元字符:\d:表示任何一个数字,等效于[0-9]。
\D:表示除数字以外的任何一个字符,等效于[^0-9]。
\s:表示任何一个空格字符,等效于[ \t\n\r\f\v]。
\S:表示除空格字符以外的任何一个字符。
\w:表示任何一个字母、数字或下划线字符,等效于[a-zA-Z0-9_]。
\W:表示除字母、数字和下划线以外的任何一个字符。
.:表示除换行符以外的任何一个字符。
3. 重复符号:正则表达式中的重复符号可以表示重复出现的字符或字符序列。
在Oracle中,我们可以使用以下重复符号:*:表示重复0次或多次。
+:表示重复1次或多次。
:表示重复0次或1次。
{n}:表示重复n次。
{n,}:表示重复n次或多次。
{n,m}:表示重复n到m次。
4. 边界符号:正则表达式中的边界符号可以表示待查找字符串的边界,如单词的开头或结尾。
在Oracle中,我们可以使用以下边界符号:^:表示字符串的开头。
$:表示字符串的结尾。
\b:表示单词边界,例如字母和空格之间的边界。
\B:表示除单词边界以外的任何一个位置。
5. 分组和反向引用:正则表达式中的分组可以一组字符视为一个整体,并对整个字符组进行操作。
Oracle数据库语句大全
Oracle数据库语句大全一.入门部分1.创建表空间create tablespace schooltbs datafile ‘D:\oracle\datasource\schooltbs.dbf’ size 10M autoextend on;2.删除表空间drop tablespace schooltbs[including contents and datafiles];3.查询表空间基本信息select *||tablespace_name from DBA_TABLESPACES;4.创建用户create user lihuaidentified by lihuadefault tablespace schooltbstemporary tablespace temp;5.更改用户alter user lihuaidentified by 123default tablespace users;6.锁定用户alter user lihua account lock|unlock;7.删除用户drop user lihua cascade;--删除用户模式8.oracle数据库中的角色connect,dba,select_catalog_role,delete_catalog_role,execute_catalo g_role,exp_full_database,imp_full_database,resource9.授予连接服务器的角色grant connect to lihua;10.授予使用表空间的角色grant resource to lihua with grant option;--该用户也有授权的权限11.授予操作表的权限grant select,insert on user_tbl to scott;--当前用户grant delete,update on er_tbl to scott;--系统管理员二.SQL查询和SQL函数1.SQl支持的命令:数据定义语言(DDL):create,alter,drop数据操纵语言(DML):insert,delete,update,select数据控制语言(DCL):grant,revoke事务控制语言(TCL):commit,savepoint,rollback2.Oracle数据类型字符,数值,日期,RAW,LOB字符型char:1-2000字节的定长字符varchar2:1-4000字节的变长字符long:2GB的变长字符注意:一个表中最多可有一列为long型Long列不能定义唯一约束或主键约束long列上不能创建索引过程或存储过程不能接受long类型的参数。
oracle常用语法
oracle常用语法Oracle是一种广泛使用的关系型数据库管理系统,它被广泛使用于企业级应用程序和其他高效数据处理方案中。
在使用Oracle时,需要掌握一些常用的语法和技巧,才能更轻松地处理数据。
下面我们来介绍一些常用的Oracle语法。
1. SELECT语句SELECT语句是Oracle中最常用的语句之一,它用于从表中检索数据。
SELECT语句的基本语法如下:SELECT column1, column2, …, columnN FROM table_name;其中,column1, column2, …, columnN是需要检索的列名,table_name是需要从中检索数据的表名。
可以使用通配符(*)来检索所有列。
2. WHERE语句WHERE语句用于从表中选择满足指定条件的行。
它的基本语法如下:SELECT column1, column2, …, columnN FROM table_name WHERE condition;其中,condition是指定的条件,可以使用比较运算符(>、<、=、>=、<=、<>)和逻辑运算符(AND、OR、NOT)来连接多个条件。
例如:SELECT * FROM employees WHERE salary > 50000 AND department = 'Sales';此语句将从employees表中选择薪资大于50000且所在部门为“Sales”的员工。
3. ORDER BY语句ORDER BY语句用于按照指定的列对检索结果进行排序。
它的基本语法如下:SELECT column1, column2, …, columnN FROM table_name ORDER BY column1 [ASC|DESC];其中,ASC表示按升序排列,DESC表示按降序排列。
例如:SELECT * FROM employees ORDER BY salary DESC;此语句将从employees表中选择所有员工,并按薪资从高到低进行排序。
oracle常用的SQL及语法
1、两个oracle 开发工具介绍a)SqlDbx王金生曾推荐过的一款数据库客户端开发工具,使用容易,不需要额外的安装其它插件,有sql提示功能,支持Oracle,Sybase ASE, IBM,DB2/UDB, MicrosoftSQL Server 和ODBC数据源,免费绿色版。
b)PLSQL Developer专门针对oracle开发的一款比较专业的客户端工具,除了常用的数据库操作外,还支持存储过程及函数的调试功能等比较高级的功能,详细的操作可以安装完毕后大家去慢慢研究。
配置方式见网上找的一段方法,第二种:/view/65b5a80f6c85ec3a87c2c583.html以上提到的工具及可能用到的插件见共享目录中的文件。
2、oracle 与 sqlserver 语法大比较a)oracle各类型字段描述b)字段类型比较c)常用函数比较注:此处仅记录语法有区别的地方,更多丰富的语法请查看附件中的手册。
以下的exp为expression的缩写d)关于脏读目前我们使用的sqlserver 数据库,在查询数据时,都要求在select语句中后面跟一个(nolock)或(with nolock)来保证读取大表时不影响其它程序进程的数据操作。
在oracle中,目前还不允许脏读的方式,在每次select 后,读到的数据都是已经commit的数据,所以为了避免读取数据的不准确,程序中如果有比较耗时的sql 操作,尤其是在insert 和update后,尽量减小事务,而且要在事务结束后及时commit。
e)表(主键、外键、CHECK、UNIQUE、DEFAULT、INDEX)在创建表及其主键、外键、CHECK、UNIQUE、DEFAULT、INDEX时,SQL SERVER 与ORACLE的语法大致相同。
主要区别如下:Oracle定义表字段的default属性紧跟字段类型之后,如下:Create table MZ_Ghxx( ghlxh number primay key ,rq date default sysdate not null,….)而不能写成Create table MZ_Ghxx( ghlxh number primay key ,rq date not null default sysdate,….)f)存储过程/函数结构的不同SQLSERVER中存储过程的结构大致如下CREATE PROCEDURE procedure_name/*输入、输出参数的声明部分*/ASDECLARE/*局部变量的声明部分*/BEGIN/*主体SQL语句部分*//*游标声明、使用语句在此部分*/ENDORACLE中存储过程的结构大致如下CREATE OR REPLACE PROCEDURE procedure_name(/*输入、输出参数的声明部分*/ )AS/*局部变量、游标等的声明部分*/BEGIN/*主体SQL语句部分*//*游标使用语句在此部分*/EXCEPTION/*异常处理部分*/END ;ORACLE端FUNCTION语法说明CREATE [OR REPLACE] FUNCTION function_name[(argument [{IN | OUT | IN OUT }] ) type,…[(argument [{IN | OUT | IN OUT }] ) typeRETURN return_type {IS | AS}BEGIN…END;变量赋值在SQL SERVER语句中用如下语句对局部变量赋值(初始值或数据库表的字段值或表达式):“SELECT 局部变量名= 所赋值(初始值或数据库表的字段值或表达式)”;而在ORACLE中,将初始值赋给局部变量时,用如下语句:“局部变量名: = 所赋值(初始值或表达式);”,将检索出的字段值赋给局部变量时,用如下语句:“SELECT 数据库表的字段值INTO 局部变量名…”。
oracle比较时间大小的语法
oracle比较时间大小的语法
在Oracle中,要比较时间大小,可以使用比较运算符(如大于号、小于号等)或者内置的日期比较函数。
以下是一些常用的比较时间大小的语法:
1. 使用比较运算符:
大于: `date_column1 > date_column2`。
小于: `date_column1 < date_column2`。
大于等于: `date_column1 >= date_column2`。
小于等于: `date_column1 <= date_column2`。
2. 使用日期比较函数:
比较两个日期的大小: `GREATEST(date1, date2)` 返回较大的日期,`LEAST(date1, date2)` 返回较小的日期。
比较日期是否在某个范围内: 可以使用 `BETWEEN` 关键字进行范围比较,例如 `date_column BETWEEN date1 AND date2`。
3. 使用日期函数进行比较:
除了比较运算符和日期比较函数外,Oracle还提供了一系列日期函数,如 `MONTHS_BETWEEN`、`ADD_MONTHS` 等,可以用来进行日期的加减和比较操作。
需要注意的是,在进行日期比较时,要确保比较的两个日期数据类型一致,可以使用 `TO_DATE` 函数将字符串转换为日期类型,以便进行比较。
总之,在Oracle中比较时间大小的语法可以通过比较运算符、日期比较函数和日期函数来实现,具体使用哪种方式取决于具体的需求和场景。
希望这些信息能够帮助到你。
oracle语法
oracle语法1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建备份数据的 deviceUSE masterEEC sp_addumpdevice 'disk', 'testBack','c:\mssql7backup\MyNwind_1.dat'---开始备份BACKUP DATABASE pubs TO testBack4、说明:创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)根据已有的表创建新表:A:select into table_new from table_old (使⽤旧表创建新表) B:create table tab_new as select col1,col2… from tab_old definition only<;仅适⽤于Oracle>5、说明:删除新表drop table tabname6、说明:增加⽤个列,删除⽤个列A:alter table tabname add column col typeB:alter table tabname drop column colname注:DB2DB2中列加上后数据类型也不能改变,唯⽤能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)说明:删除主键: Alter table tabname drop primary key(col)8、说明:创建索引:create [unique] index idxname ontabname(col….)删除索引:drop index idxname注:索引是不可更改的,想更改必须删除重新建。
oracle动态sql语句基本语法
oracle动态sql语句基本语法Oracle动态SQL语句是一种在运行时动态生成SQL语句的技术。
它可以根据不同的条件和参数生成不同的SQL语句,从而实现更加灵活和高效的数据操作。
下面是Oracle动态SQL语句的基本语法:1. 使用EXECUTE IMMEDIATE语句执行动态SQL语句:EXECUTE IMMEDIATE 'SELECT * FROM employees WHERE department_id = :dept_id' USING dept_id;2. 使用BIND VARIABLES绑定变量:DECLAREv_dept_id NUMBER := 10;v_sql VARCHAR2(100);BEGINv_sql := 'SELECT * FROM employees WHERE department_id = :dept_id';EXECUTE IMMEDIATE v_sql USING v_dept_id;END;3. 使用PL/SQL变量拼接SQL语句:DECLAREv_dept_id NUMBER := 10;v_sql VARCHAR2(100);BEGINv_sql := 'SELECT * FROM employees WHERE department_id = ' || v_dept_id;EXECUTE IMMEDIATE v_sql;END;4. 使用CASE语句生成动态SQL语句:DECLAREv_dept_id NUMBER := 10;v_sql VARCHAR2(100);BEGINv_sql := 'SELECT * FROM employees WHERE department_id = ';v_sql := v_sql || CASE WHEN v_dept_id IS NULL THEN 'NULL' ELSE TO_CHAR(v_dept_id) END;EXECUTE IMMEDIATE v_sql;END;5. 使用FOR LOOP生成动态SQL语句:DECLAREv_dept_id NUMBER := 10;v_sql VARCHAR2(100);BEGINv_sql := 'SELECT * FROM employees WHERE department_id IN (';FOR i IN 1..10 LOOPv_sql := v_sql || i || ',';END LOOP;v_sql := SUBSTR(v_sql, 1, LENGTH(v_sql) - 1) || ')';EXECUTE IMMEDIATE v_sql;END;6. 使用SYS_CONTEXT函数获取当前用户信息:DECLAREv_user VARCHAR2(30) := SYS_CONTEXT('USERENV', 'CURRENT_USER');v_sql VARCHAR2(100);BEGINv_sql := 'SELECT * FROM employees WHERE created_by = ''' || v_user || '''';EXECUTE IMMEDIATE v_sql;END;7. 使用DBMS_SQL包执行动态SQL语句:DECLAREv_cursor INTEGER;v_sql VARCHAR2(100);BEGINv_sql := 'SELECT * FROM employees WHERE department_id = :dept_id';v_cursor := DBMS_SQL.OPEN_CURSOR;DBMS_SQL.PARSE(v_cursor, v_sql, DBMS_SQL.NATIVE);DBMS_SQL.BIND_VARIABLE(v_cursor, ':dept_id', 10);DBMS_SQL.EXECUTE(v_cursor);DBMS_SQL.CLOSE_CURSOR(v_cursor);END;8. 使用DBMS_SQL.RETURN_RESULT函数返回结果集:DECLAREv_cursor INTEGER;v_sql VARCHAR2(100);BEGINv_sql := 'SELECT * FROM employees WHERE department_id = :dept_id';v_cursor := DBMS_SQL.OPEN_CURSOR;DBMS_SQL.PARSE(v_cursor, v_sql, DBMS_SQL.NATIVE);DBMS_SQL.BIND_VARIABLE(v_cursor, ':dept_id', 10);DBMS_SQL.EXECUTE(v_cursor);DBMS_SQL.RETURN_RESULT(v_cursor);DBMS_SQL.CLOSE_CURSOR(v_cursor);END;9. 使用DBMS_SQL.DESCRIBE_COLUMNS函数获取结果集元数据:DECLAREv_cursor INTEGER;v_sql VARCHAR2(100);v_col_cnt INTEGER;v_col_desc DBMS_SQL.DESC_TAB;BEGINv_sql := 'SELECT * FROM employees WHERE department_id = :dept_id';v_cursor := DBMS_SQL.OPEN_CURSOR;DBMS_SQL.PARSE(v_cursor, v_sql, DBMS_SQL.NATIVE);DBMS_SQL.BIND_VARIABLE(v_cursor, ':dept_id', 10);DBMS_SQL.EXECUTE(v_cursor);v_col_cnt := DBMS_SQL.FETCH_ROWS(v_cursor);DBMS_SQL.DESCRIBE_COLUMNS(v_cursor, v_col_cnt, v_col_desc); DBMS_SQL.CLOSE_CURSOR(v_cursor);END;10. 使用DBMS_SQL.COLUMN_VALUE函数获取结果集列值:DECLAREv_cursor INTEGER;v_sql VARCHAR2(100);v_col_cnt INTEGER;v_col_desc DBMS_SQL.DESC_TAB;v_emp_id NUMBER;v_emp_name VARCHAR2(30);BEGINv_sql := 'SELECT employee_id, first_name FROM employees WHERE department_id = :dept_id';v_cursor := DBMS_SQL.OPEN_CURSOR;DBMS_SQL.PARSE(v_cursor, v_sql, DBMS_SQL.NATIVE);DBMS_SQL.BIND_VARIABLE(v_cursor, ':dept_id', 10);DBMS_SQL.EXECUTE(v_cursor);v_col_cnt := DBMS_SQL.FETCH_ROWS(v_cursor);DBMS_SQL.DESCRIBE_COLUMNS(v_cursor, v_col_cnt, v_col_desc); LOOPEXIT WHEN DBMS_SQL.FETCH_ROWS(v_cursor) = 0;DBMS_SQL.COLUMN_VALUE(v_cursor, 1, v_emp_id);DBMS_SQL.COLUMN_VALUE(v_cursor, 2, v_emp_name);DBMS_OUTPUT.PUT_LINE(v_emp_id || ' ' || v_emp_name);END LOOP;DBMS_SQL.CLOSE_CURSOR(v_cursor);END;以上是Oracle动态SQL语句的基本语法,可以根据实际需求进行灵活应用。
oracle语句汇总
Oracle 常用语句汇总select * from user_tab_comments 取得所有表的注释select * from user_col_comments 取得所有列的注释select * from user_tables 取得当前用户下所有的表1、查找表的所有索引(包括索引名,类型,构成列):select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表2、查找表的主键(包括名称,构成列):select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name = 要查询的表3、查找表的唯一性约束(包括名称,构成列):select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = 要查询的表4、查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询):select * from user_constraints c where c.constraint_type = 'R' and c.table_name = 要查询的表查询外键约束的列名:select * from user_cons_columns cl where cl.constraint_name = 外键名称查询引用表的键的列名:select * from user_cons_columns cl where cl.constraint_name = 外键引用表的键名5、查询表的所有列及其属性select t.*,MENTS from user_tab_columns t,user_col_comments c where t.table_name = c.table_name and t.column_name = c.column_name and t.table_name = 要查询的表/*1-获取任意用户下的主键字段*/select cons.* from all_cons_columns cons, all_constraints conwhere con.constraint_type='P'and cons.table_name = '表名'and cons.constraint_name=con.constraint_name;/*2-获取本用户下的主键字段*/select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name = '表名'正在看的ORACLE教程是:oracle常用sql语句。
oracle 语句大全
oracle 语句大全SELECT --从数据库表中检索数据行和列INSERT --向数据库表添加新数据行DELETE --从数据库表中删除数据行UPDATE --更新数据库表中的数据--数据定义CREATE TABLE --创建一个数据库表DROP TABLE --从数据库中删除表ALTER TABLE --修改数据库表结构CREATE VIEW --创建一个视图DROP VIEW --从数据库中删除视图CREATE INDEX --为数据库表创建一个索引DROP INDEX --从数据库中删除索引CREATE PROCEDURE --创建一个存储过程DROP PROCEDURE --从数据库中删除存储过程CREATE TRIGGER --创建一个触发器DROP TRIGGER --从数据库中删除触发器CREATE SCHEMA --向数据库添加一个新模式DROP SCHEMA --从数据库中删除一个模式CREATE DOMAIN --创建一个数据值域ALTER DOMAIN --改变域定义DROP DOMAIN --从数据库中删除一个域--数据控制GRANT --授予用户访问权限DENY --拒绝用户访问REVOKE --解除用户访问权限--事务控制COMMIT --结束当前事务ROLLBACK --中止当前事务SET TRANSACTION --定义当前事务数据访问特征--程序化SQLDECLARE --为查询设定游标EXPLAN --为查询描述数据访问计划OPEN --检索查询结果打开一个游标FETCH --检索一行查询结果CLOSE --关闭游标PREPARE --为动态执行准备SQL 语句EXECUTE --动态地执行SQL 语句DESCRIBE --描述准备好的查询---局部变量declare @id char(10)--set @id = '10010001'select @id = '10010001'---全局变量---必须以@@开头--IF ELSEdeclare @x int @y int @z intselect @x = 1 @y = 2 @z=3if @x > @yprint 'x > y' --打印字符串'x > y'else if @y > @zprint 'y > z'else print 'z > y'--CASEuse panguupdate employeeset e_wage =casewhen job_level = ’1’ then e_wage*1.08when job_level = ’2’ then e_wage*1.07when job_level = ’3’ then e_wage*1.06else e_wage*1.05end--WHILE CONTINUE BREAKdeclare @x int @y int @c intselect @x = 1 @y=1while @x <3 br/>beginprint @x --打印变量x 的值while @y <3 br/>beginselect @c = 100*@x + @yprint @c --打印变量c 的值select @y = @y + 1endselect @x = @x + 1select @y = 1end--WAITFOR--例等待1 小时2 分零3 秒后才执行SELECT 语句waitfor delay ’01:02:03’select * from employee--例等到晚上11 点零8 分后才执行SELECT 语句waitfor time ’23:08:00’select * from employee***SELECT***select *(列名) from table_name(表名) where column_name operator valueex:(宿主)select * from stock_information where stockid = str(nid)stockname = 'str_name'stockname like '% find this %'stockname like '[a-zA-Z]%' --------- ([]指定值的范围)stockname like '[^F-M]%' --------- (^排除指定范围)--------- 只能在使用like关键字的where子句中使用通配符)or stockpath = 'stock_path'or stocknumber <1000 br/>and stockindex = 24not stocksex = 'man'stocknumber between 20 and 100stocknumber in(10,20,30)order by stockid desc(asc) --------- 排序,desc-降序,asc-升序order by 1,2 --------- by列号stockname = (select stockname from stock_information where stockid = 4)--------- 子查询--------- 除非能确保内层select只返回一个行的值,--------- 否则应在外层where子句中用一个in限定符select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_nameselect stockname , "stocknumber" = count(*) from table_name group by stockname--------- group by 将表按行分组,指定列中有相同的值having count(*) = 2 --------- having选定指定的组select *from table1, table2where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示table1.id =* table2.id -------- 右外部连接select stockname from table1union [all] ----- union合并查询结果集,all-保留重复行select stockname from table2***insert***insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")value (select Stockname , Stocknumber from Stock_table2)---value为select语句***update***update table_name set Stockname = "xxx" [where Stockid = 3]Stockname = defaultStockname = nullStocknumber = Stockname + 4***delete***delete from table_name where Stockid = 3truncate table_name ----------- 删除表中所有行,仍保持表的完整性drop table table_name --------------- 完全删除表***alter table*** --- 修改数据库表结构alter table database.owner.table_name add column_name char(2) null .....sp_help table_name ---- 显示表已有特征create table table_name (name char(20), age smallint, lname varchar(30))insert into table_name select ......... ----- 实现删除列的方法(创建新表)alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束***function(/*常用函数*/)***----统计函数----AVG --求平均值COUNT --统计数目MAX --求最大值MIN --求最小值SUM --求和--AVGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id--MAX--求工资最高的员工姓名use panguselect e_namefrom employeewhere e_wage =(select max(e_wage)from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/***三角函数***/SIN(float_expression) --返回以弧度表示的角的正弦COS(float_expression) --返回以弧度表示的角的余弦TAN(float_expression) --返回以弧度表示的角的正切COT(float_expression) --返回以弧度表示的角的余切/***反三角函数***/ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角ATAN2(float_expression1,float_expression2)--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角DEGREES(numeric_expression)--把弧度转换为角度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型EXP(float_expression) --返回表达式的指数值LOG(float_expression) --返回表达式的自然对数值LOG10(float_expression)--返回表达式的以10 为底的对数值SQRT(float_expression) --返回表达式的平方根/***取近似值函数***/CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π即3.1415926535897936RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数----字符串函数----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数用于将ASCII 码转换为字符--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值LOWER() --函数把字符串全部转换为小写UPPER() --函数把字符串全部转换为大写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置SOUNDEX() --函数返回一个四位字符码--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第一个字符不同--1 两个SOUNDEX 函数返回值的第一个字符相同--2 两个SOUNDEX 函数返回值的第一二个字符相同--3 两个SOUNDEX 函数返回值的第一二三个字符相同--4 两个SOUNDEX 函数返回值完全相同QUOTENAME() --函数返回被特定字符括起来的字符串/*select quotename('abc', '{') quotename('abc')运行结果如下----------------------------------{{abc} [abc]*/REPLICATE() --函数返回一个重复character_expression 指定次数的字符串/*select replicate('abc', 3) replicate( 'abc', -2)运行结果如下----------- -----------abcabcabc NULL*/REVERSE() --函数将指定的字符串的字符排列顺序颠倒REPLACE() --函数返回被替换了指定子串的字符串/*select replace('abc123g', '123', 'def')运行结果如下----------- -----------abcdefg*/SPACE() --函数返回一个有指定长度的空白字符串STUFF() --函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST() 函数语法如下CAST() ( AS [ length ])CONVERT() 函数语法如下CONVERT() ([ length ], [, style])select cast(100+99 as char) convert(varchar(12), getdate())运行结果如下------------------------------ ------------199 Jan 15 2000----日期函数----DAY() --函数返回date_expression 中的日期值MONTH() --函数返回date_expression 中的月份值YEAR() --函数返回date_expression 中的年份值DATEADD( , ,)--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期DATEDIFF( , ,)--函数返回两个指定日期在datepart 方面的不同之处DATENAME( , ) --函数以字符串的形式返回日期的指定部分DATEPART( , ) --函数以整数值的形式返回日期的指定部分GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间----系统函数----APP_NAME() --函数返回当前执行的应用程序的名称COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值COL_NAME(, ) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回服务器端计算机的名称HOST_NAME() --函数返回服务器端计算机的名称IDENTITY([, seed increment]) [AS column_name])--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中/*select identity(int, 1, 1) as column_nameinto newtablefrom oldtable*/ISDATE() --函数判断所给定的表达式是否为合理日期ISNULL(, ) --函数将表达式中的NULL 值用指定值替换ISNUMERIC() --函数判断所给定的表达式是否为合理的数值NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值NULLIF(, )--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值??。
oracle常用语法
oracle常⽤语法别名别名中不能出现中⽂括号()不能使⽤全⾓符号coalescecoalesce(参数列表):返回参数列表中第⼀个⾮空参数,最后⼀个参数通常为常量distinct去重nvl作⽤:判断某个值是否为空值,若不为空值则输出,若为空值,返回指定值。
专详细解释如下:1、nvl()函数的格属式如下:NVL(expr1,expr2);2、含义是:如果oracle第⼀个参数为空那么显⽰第⼆个参数的值,如果第⼀个参数的值不为空,则显⽰第⼀个参数本来的值。
3、例:select name,NVL(name,-1) from user;运⾏后,结果返回两列数值,若name为空,则返回-1,若name不为空值,则返回其⾃⾝。
roundround函数⽤于数据的四舍五⼊1、round(x,d) ,x指要处理的数,d是指保留⼏位⼩数这⾥有个值得注意的地⽅是,d可以是负数,这时是指定⼩数点左边的d位整数位为0,同时⼩数位均为0;2、round(x) ,其实就是round(x,0),也就是默认d为0;union与union allunion:去重复,排序union all:不重复也不排序.(推荐)intersect 与 minusintersect 就是交集minus 就是差集交集就是两个结果集中都有的元素⽐如 select uid from tb1intersectselect uid from tb2那么既存在zhitb1 ⼜存在tb2中相同的UID 就会查dao出来差集:select uid from tb1minusselect uid from tb2存在于tb1 但不存在与tb2中的uid 会被查出表的复制如果需要对表中的数据进⾏删除和修改,建议通过复制表中的数据来对数据进⾏操作create table 表名 as 查询语句;--将emp表中的数据复制到t_emp表中create table t_empasselect * from emp;--只需要表的结构--将emp表的结构复制到t_emp表中create table t_empasselect * from empwhere 1=0;/*提供⼀个否定条件*/--只复制⼀部分数据--将emp表中部门10的员⼯的数据复制到t_emp表中create table t_empasselect * from empwhere deptno=10;--将emp表中的员⼯姓名,⼯资,年薪保存到t_emp表中create table t_empasselect ename,sal,sal*12 year_sal /*如果字段中出现函数或者计算需要提供别名*/ from emp;--统计emp表中部门的⼈数,将部门编码和⼈数保存到t_emp表中create table t_emp(did,ecount)asselect deptno,count(ename)from empgroup by deptno;注意:表的复制只会复制表中的数据,不会复制表中的约束伪列rowid,rownumselect rowid from dual;rowid:是⼀个伪列,Oracle独有的.每⼀条记录的rowid 的记录是唯⼀的sign⽐较⼤⼩与0进⾏⽐较,判断是不是正数,⼤于0显⽰1 ,⼩于0显⽰-1 ,等于0显⽰0 select sign( 100 ),sign(- 100 ),sign( 0 ) from dual;如何进⾏SQL语句的优化在select语句中避免使⽤*减少数据库的访问次数删除重复记录尽量多使⽤commit使⽤where替换having多使⽤内部函数提⾼sql语句效率多使⽤表的别名使⽤exists替换in,使⽤not exists替换notin尽量使⽤索引类进⾏查询sql语句尽量⼤写.oracle会⾃动转换成⼤写避免在索引列上进⾏计算避免在索引类上使⽤not,oracle遇到not就使⽤全表扫描可以使⽤>=替换>使⽤in替换or尽量使⽤where替换groupby避免使⽤消耗资源的操作.如union⼦查询注意事项1.⼦查询需要定义在括号当中2.⼦查询通常定义在条件判断的右边3.在⼦查询中不建议使⽤ order by⼦查询中多⾏⽐较符in :等于列表中的任何⼀个any:和⼦查询结果中的任意⼀个值进⾏⽐较all:和⼦查询结果中的所有值进⾏⽐较oracle 与 mysql的区别(1) 对事务的提交MySQL默认是⾃动提交,⽽Oracle默认不⾃动提交,需要⽤户⼿动提交,需要在写commit;指令或者点击commit按钮(2) 分页查询MySQL是直接在SQL语句中写"select... from ...where...limit x, y",有limit就可以实现分页;⽽Oracle则是需要⽤到伪列ROWNUM和嵌套查询(3) 事务隔离级别MySQL是read commited的隔离级别,⽽Oracle是repeatable read的隔离级别,同时⼆者都⽀持serializable串⾏化事务隔离级别,可以实现最⾼级别的读⼀致性。
oracle 的语法
oracle 的语法Oracle的语法是一种用于访问和管理Oracle数据库的编程语言。
它提供了一种结构化的方式来存储、操作和检索数据,并允许用户创建和管理数据库对象。
本文将介绍一些常用的Oracle语法,并解释其用法和含义。
一、DDL语句DDL(Data Definition Language)语句用于定义和管理数据库对象,例如表、视图、索引等。
常用的DDL语句包括CREATE、ALTER和DROP。
1. CREATE TABLECREATE TABLE语句用于创建表。
它指定了表的名称和列的定义。
列的定义包括名称、数据类型和约束条件等。
例如:CREATE TABLE employees (employee_id NUMBER(10),first_name VARCHAR2(50),last_name VARCHAR2(50),hire_date DATE,salary NUMBER(10,2));2. ALTER TABLEALTER TABLE语句用于修改表的结构。
它可以添加、修改或删除列,添加或删除约束等。
例如:ALTER TABLE employeesADD (department_id NUMBER(10));3. DROP TABLEDROP TABLE语句用于删除表。
它会删除表的定义和所有相关的数据。
例如:DROP TABLE employees;二、DML语句DML(Data Manipulation Language)语句用于操作数据库中的数据。
常用的DML语句包括SELECT、INSERT、UPDATE和DELETE。
1. SELECTSELECT语句用于查询数据库中的数据。
它可以指定要查询的列、表和条件等。
例如:SELECT employee_id, first_name, last_nameFROM employeesWHERE department_id = 100;2. INSERTINSERT语句用于向表中插入新的数据。
oracle语法大全有注解
第一部分基本语法//拼接表字段select id || 'is' || name from adminselect * from emp where ename like'%s%';//模糊查询select * from emp where mgr is null ; //查询表列为空的to_date('2011-12-12','yyyy-mm-dd') //插入时间格式 to_date()//给表字段取别名select id as这是ID , name as "这是名字" from admin//清除重复出现的值select distinct id,name from admin//用户定义降序select * from admin order by id desc //asc升序 //desc降序//查询当前时间select sysdate from admin第二部分字符函数//截取字符串select substr (name,1,1) as用户名from admin //(1,1)表示第一个开始,和第一个数//取出字段的长度select length(name) from admin//取出字符串为’张’当前所在的位置为几,找不到则为0 …区分大小写select name ,instr(name,'张') from admin// lpad左侧补全, rpad右侧补全select lpad(name,10, '-') from adminselect rpad(name,10, '-') from admin//给字段截取前后空格select trim(name) from admin//给字段为张的全部替换为zhangselect name ,replace(name,'张','zhang') from admin第四部分表达式语法//case表达式语句给用户区别名用法,相当与if elseselect id,name,case id when1then'优'when2then'良'when3then'差'else'未知'end部门from admin//decode()函数给用户区别名用法,与上面意思一个样select id,name,decode(id,1,'优',2,'良',3,'差','未知') as成绩from admin//函数嵌套,单行函数可以嵌套使用,嵌套层次无限制select id,name,initcap(trim(rpad(name,10,'-'))) from admin//函数里面可以是字段名,也可以是表达式,日期类型select avg(id) as平均数,max(id) as最大数,min(id) as最小数,sum(id) as总和from admin//查询总数,不能有重复和不能为空的id总数select count(distinct(id)) as总数from admin//求总和,如果id字段为空,则设置字段为0. 然后用总和除以总数最后得出结果select sum(nvl(id,0)) / count(id) as总和除以总数from admin//查询id为1的数量有多少个 , 根据平均分排序select count(id) as记录数from admin where id =1group by id having id=1 order by avg(id)//查询id大于3 having筛选 id<5 之间的数总数select count(id) as记录数from admin where id > 3group by id having id < 5第六部分多表连接//emp表和dep表结构--emp表,create table emp(empNo number,eName varchar2(20), sal number, deptNo number);insert into emp(empNo,eName,sal,deptno) values(7369,'smith',800,20);insert into emp values(7499,'allen',1600,30);insert into emp values(7521,'ward',1250,30);insert into emp values(7566,'jones',2975,20);insert into emp values(7654,'martin',1250,30);insert into emp values(7902,'ford',300,20);insert into emp values(7934,'miller',1300,10);drop table empselect * from emp--dep表create table dep(deptNo number,dName varchar2(20),loc varchar2(20));insert into dep values(10,'accounting','new york')insert into dep values(20,'research','dallas')insert into dep values(30,'sales','chicago')insert into dep values(40,'operations','boston')insert into dep values(50,'advertisement','beijing')drop table depselect * from dep// 根据deptNo编号对应查找出相应的数据select emp.empno,emp.ename,emp.sal,emp.deptno,dep.deptno,dep.dname,dep.loc from emp,depwhere emp.deptno = dep.deptno;// Join字句连接的方法查询两张表数据, using(deptNo)参照列进行连接// right left 左右连接全外连接 full outerselect emp.empno,emp.ename,emp.sal,deptno,deptno,dep.dname,dep.locfrom emp join depusing(deptno);// on字句连接的方法查询两张表数据,On( emp.deptno = dep.deptno and sal > 1000);// 根据deptNo编号对应查找出相应的数据根据sal和loc进行筛选select e.empno,ename,sal,d.deptno,d.deptno,dname,locfrom emp e,dep dwhere e.deptno = d.deptno and ( e.sal > 1000or d.loc='chicago' );// e和d对应 d和l对应的数据进行三表查询,,select e.empno,ename,sal,d.deptno,d.deptno,dname,loc,l.idfrom emp e,dep d,loc lwhere e.deptno = d.deptno and l.id=e.id// Join 进行三表查询,,select e.empno,ename,sal,d.deptno,d.deptno,dname,loc,l.idfrom emp join dep using(deptNo)natural join locatins; //也可以继续 join 表名 using(关联列)第七部分子查询// 简单的子查询语法,,如果有多个返回值select * from emp where sal > ( select sal from emp where sal = 800 )+ ( select sal from emp where sal = 300 )//使用 in等于列表中任何一个 not in 不在这里面的所有列表select * from emp where sal not in (select avg(sal) from emp group by deptno)//使用 any 和子查询返回的任意一个值比较查最小select * from emp where sal > any (select avg(sal) from emp group by deptno)//使用 all和子查询返回的所有值比较查最大select * from emp where sal > all (select avg(sal) from emp group by deptno)//返回前面五条最高记录, rownum相当与 sqlserver里面top rownum也可当虚拟主键select * from (select * from emp order by sal desc) where rownum <=5//分页子查询语句,, rownum定义的虚拟主键,别名myno where 进行筛选select * from (select rownum myno , a.* from (select * from emp order by sal desc) a ) where myno > 4and myno <=7//希望员工scott的岗位,工资,补助与smith员工一样Update emp set (job,sal,comm) = (select job,sal,comm from emp where = 'smith') where ename = 'scott';第八部分DML与事务控制//事物必须满足ACID属性,→原子性(Atomicity):有一个地方出错,前面成功的也撤销..应是一个整体..必须恢复以前数据.要么全部成功,要么全部失败..→一致性(Consistency):数据必须处于一致性,如B级工资300升到500级别也从B升到A,但是数据保持不一致,只上调了级别没上调工资..→隔离性(Isolation):多个事物多个用户操作一个数据, 如修改字段,其他事物不受影响..直到事物都成功了, 要么看到的数据之前和之后的状态中间的被隔离开→持久性(Durability):事物结束后永久保存在数据库中..不能撤销//insert into 插入表中所有的数据Insert into admin(id,name) select id,name from admin;insert into admin values(6,'老百');回滚点savepoint p1;insert into admin values(6,'老千');回滚 rollback p1;提交commit;set autocommit on;set autocommit off;第九部分数据库对象//创建 test 表create table test(id number(10),name varchar2(20),hiredate date default sysdate,salary number(8,2) default0);// 将test 表的字段数据注入到test1里面来create table test1(用户id,用户名字)as select id,name from test// 给test表增加mm gg 两个字段默认值是,,...alter table testadd(gg varchar2(20) default'你是男人',mm varchar2(20) default'你是女人')// 使用modify给字句修改现有字段,包括字段的数据类型,大小和默认值alter table testmodify(gg varchar2(20) default'你是猪',mm varchar2(20) default'你真笨');// 使用drop删除表中字段行 drop table 表名即可删除表alter table testdrop(gg,mm);// 使用truncate清空表所有的记录,不能进行条件的删除,表结构还在create table test1 as (select name,hiredate,salary from test) truncate table test1// 使用rename讲表test1名字替换成testrename test1 to test// 查看当前用户拥有的所有表的名字select * from user_tables;// 查询当前用户可访问的所有表的名字select * from all_tables;// 查询当前用户拥有所有对象的类型select distinct object_type from user_objects;// 查询用户拥有所有对象的类型select * from dba_tables;第十部分表约束create table mg(id number(3) primary key, //主键约束gg number not null unique, //唯一约束mm number constraint mg_mm not null, //非空约束constraint mg_id_fk foreign key(id) references admin(id); //外键约束);//给admin表增加 check约束create table admin(id number(3) check(id>=5and id<=10),name varchar2(20) check(length(name)>4and length(name) <=20))//建好表之后在添加约束和删除约束create table student(sid number(3),sname varchar2(20),saddress varchar2(20),tid number(3))alter table studentadd constraint studetn_pk_sid primary key(sid);alter table studentadd constraint studetn_sname check(length(sname)>4);alter table studentadd constraint studetn_saddress saddress default'湖南岳阳';alter table studentadd constraint studetn_fk_tid foreign key(tid) references tracher(tid);alter table studentdrop constraint studetn_pk_sidcreate table tracher(tid number(3))alter table tracheradd constraint tracher_pk_id primary key(tid);第十一部分视图,索引//添加简单的视图create or replace view v1as select * from empdesc v1drop view v1;//添加简单的索引create index myindex on emp(ename);drop index myindex第十二部分基本数据命令Conn scott/sa //切换用户账户Show user //查询属于那个用户Desc //查看表结构Disconnect //断开数据库连接Password //修改用户密码Exit //断开,退出窗口Start 加路径. //要导入sql文件Edit 加路径 //需要打开的修改的文件Spool 加路径 spool off保存 //把结果保存到文件里面去Setpagesize //一页显示多少条数据Create user (admin)用户名 indentified by (sa)密码 //创建用户和密码Drop user (admin)用户名 //删除用户Grant connect to (admin)用户名 //给用户授予连接权限用户才能进行登录Grant resource to (admin)用户名 //给有用授予创建表的权限才能创建表Grant select on emp to (admin)用户名 //用其他用户登录给admin表授予查询emp表权限Grant update on emp to (admin)用户名 //给用户授予改emp表的权限Grant all on emp to (admin)用户名 //给用户授予增删改emp表的权限Revoke select on emp from admin //收回权限使用 revoke 上面都可收回Grant select on emp to admin with grant option //给admin授予可以给别人授予这张表查询权限Revoke select on emp to admin with grant option //撤销admin授予可以给别人授予这张表查询权限Alter user admin(用户名) account unlock; //给用户解锁第十三部分sequence自增Create sequence myseq //自增Drop sequence myseq //删除自增Insert into test values(myseq.nextval);Insert into test values(myseq.currval)/*创建序列*/ create sequence s_id increment by 1 start with 1 nomaxvalue nocycle; /*创建触发器*/ create or replace trigger myTrigger before insert on myTable referencing old as old_value new as new_value for each row beginnew_erid= s_id.nextval; end;end;oracle都用sequence可以直接用native,hibernate会根据底层数据库自行判断采用sequence。
oracle语法大全
oracle语法大全SQL>desc s_emp脚本sql.txt sql.sql1.上传脚本2.运行脚本@绝对路径/文件名@文件名(存眷说话情形)select userenv('lang') from dual;USERENV('LANG')----------------USUSERENV('LANG')----------------ZHSdesc 一张表Name Null? Type----------------------------------------- -------- -----------------ID 职员id NOT NULL NUMBER(7)LAST_NAME 姓NOT NULL VARCHAR2(25) FIRST_NAME 名V ARCHAR2(25) USERID 职员描述V ARCHAR2(8) START_DATE 入职日期DA TECOM MENTS 备注V ARCHAR2(255) MANAGER_ID 引导的职员id NUMBER(7) TITLE 职位V ARCHAR2(25)DEPT_ID 部分id NUMBER(7) SALARY 月薪NUMBER(11,2) COMMISSION_PCT 提成NUMBER(4,2)sql语句的分类:数据检索select数据操作insert delete update数据定义create drop alter事务操纵commit rollback savepoint数据操纵grant revoke选择投影连接查询语句:A from 子句1.查询出随便率性一个字段select 字段名from 表名;select salary from s_emp;2.查询多个字段(用逗号瓜分)select first_name,salary from s_emp;3.* 号能够替代所有的字段select * from s_emp;4.表头的原样显示----应用双引号select first_name,salary sal from s_emp;select first_name,salary "sal" from s_emp;能够让别号中包含空格select first_name,salary "emP sal" from s_emp;5.字段的数学运算求每小我的年薪select salary*12 yearsal from s_emp;换一种年薪运算方法推敲提成select salary*12*(1+commission_pct/100) yearsal from s_emp;select salary*12*(1+commission_pct/100) yearsal from s_emp;nvl 空值处理函数nvl(值/字段,假如是空要获得的值)第一个参数是NULL 就返回第二个参数假如第一个参数不是NULL 返回第一个参数select nvl(salary*12*(1+commission_pct/100),0)yearsal from s_emp;//logic error空值要尽早处理空值和任何值做运算差不多上NULLselect salary*12*(1+nvl(commission_pct,0)/100)yearsal from s_emp;6.想把姓名显示出来select first_name,last_name from s_emp;字符串连接||select first_name||last_name from s_emp;字符串的表达'hello' '_' ' ' ''select first_name||'_'||last_name from s_emp;this'sselect first_name||''''||last_name from s_emp;7.排重显示---distinctselect salary from s_emp;select distinct salary from s_emp;补偿:结合排重select distinct salary,id from s_emp;clear screen!clearB 前提子句wherewhere 字段表达式表达式找出工资大年夜于1400的first_name,salaryselect first_name,salary from s_emp where 1=1;//全部显示select first_name,salary from s_emp where 1=2;//无显示select first_name,salary from s_emp where salary>1400;where 前提限制行的返回相符前提返回不相符过滤掉落字段表达式中能够应用的比较运算符= 一个等号确信相等找出first_name ,manager_id 是Carmen 的工资select first_name,salary,manager_id from s_emp wherefirst_name='Carmen';数字类型能够直截了当用等号确信相等字符串不要不记得单引号oracle sql 大年夜小写不敏锐单字符串的值大年夜小写敏锐><<=>=!= <> ^=between and not between andin not inlike not likeis null is not nulloracle(sql) 也供给了一些运算符字段between a and b 表达一个闭区间[a,b]工资salary 在[800,1400]select first_name,salary from s_emp where salarybetween 800 and 1400;字段in (list) list用逗号隔开的一组值查询一下部分号在41 42 50 人first_name,salary select first_name,salary,dept_id from s_emp where dept_id in (41,42,50);次序对最终成果没有阻碍但对效力可能产生阻碍字段is null 确信一个字段是不是NULLid 是1的人manager_id 是不是NULLselect id,first_name from s_emp wheremanager_id is null;like -----模糊查询成龙配套成龙李小龙龙飞凤舞first_name 中带a字符的统配符:% 代表n个随便率性字符_ 一个随便率性字符'%a%''%a''a%''_a%''%a_'select first_name from s_emp wherefirst_name like '%a%';找出第二个字符是aselect first_name from s_emp wherefirst_name like '_a%';user_tables----数据字典表,储备了数据库中所有表的信息desc user_tablesTABLE_NAME 表名select table_name from user_tables;s_emp s_dept s找出所有s_开首的表名select table_name from user_tables where table_namelike 's_%';user_tables 数据字典表----默认处理成大年夜写select table_name from user_tables where table_namelike 'S_%';select table_name from user_tables where table_namelike 'S__%';//logic error转义select table_name from user_tables where table_namelike 'S\_%' escape '\';select table_name from user_tables where table_namelike 'S'||'_'||'%';//logic逻辑连接符号andor!工资salary 在[800,1400]select first_name,salary from s_emp where salarybetween 800 and 1400 ;select first_name,salary from s_emp where salary>=800and salary<=1400;工资salary 在(800,1400)select first_name,salary from s_emp where salary>800and salary<1400;字段in (list) list用逗号隔开的一组值查询一下部分号在41 42 50 人first_name,salary select first_name,salary,dept_id from s_emp where dept_id in (41,42,50);select first_name,salary,dept_id from s_empwhere dept_id=41 or dept_id=42 or dept_id=50;非关系> <=< >== != <> ^=between and not between andin not inlike not likeis null is not nullmanager_id 不是NULL的first_name ,salary,manager_id select first_name ,salary,manager_id from s_empwhere manager_id is not null;xml ----dom sax ui前提能够用小括号改变优先级别select first_name from s_emp where dept_id=41 or dept_id=42 and salary>1000;select first_name from s_emp where (dept_id=41 ordept_id=42) and salary>1000;假如不确信你的逻辑能够经由过程小括号改变逻辑优先select salary*12+100 from s_emp;select (salary+100)*12 from s_emp;C 排序排序的种类:升序字典次序天然次序asc 默认次序降序desc按照工资排序显示first_name,salaryorder by 排序字段必定涌现在sql语句最后select first_name,salary from s_emp order by salary;select first_name,salary from s_emporder by salary asc;降序select first_name,salary from s_emporder by salary desc;补偿:第一排序字段第二排序排序按照工资排序显示first_name,salary 工资雷同按first_name 降序select first_name,salary from s_emp where 1=1order by salary desc,first_name desc;D 单行函数单行函数:对一行操作之后获得一个成果组函数:对一组数据数据处理之后获得一个成果upperselect first_name,upper(first_name) from s_emp;countselect count(id) from s_emp;s_emp 表中数据专门多对单行函数的测试不是专门便利测试表dual 单行单列desc dualselect * from dual;测试字符串的函数upperlower select lower('ONE DREAM ONE WORLD') from dual;initcap select initcap('ONE DREAM ONE WORLD') from dual;length select length('ONE') from dual;edit -----进入vi 编辑界面x 删除字符dd 删除一行a i o敕令下ZZ 储存退出nvl()select nvl(NULL,'is null') from dual;select nvl('','is null') from dual;select nvl(' ','is null') from dual;nvl 要求能够处理任何类型但两个参数的类型必须一致substr(字段/值,开端的地位,截取多长)留意开端的地位是从1开端也能够负数负数从后往前编号从-1开端编号select substr('hello',1,3) from dual;select substr('hello',0,3) from dual;select substr('hello',2,4) from dual;从后编号select substr('hello',-2,2) from dual;把s_emp中first_name 的后三个字符截取下来select first_name,substr(first_name,-3,3) from s_emp;要求早年往后编号hello12345select first_name,substr(first_name,length(first_name)-2,3)from s_emp;数字select first_name from s_emp where id=1;select first_name from s_emp where id='1';//隐式类型转换select first_name from s_emp where id=to_number('1');to_number('abc') //logic errorselect initcap('one world one world') from s_emp;round(字段/值) 四舍五入取整select round(99.99) from dual;//100select round(99.94,1) from dual;//99.9select round(99.96,1) from dual;//100select round(94.96,-1) from dual;//90trunc(字段/值) 截取取整select trunc(99.99) from dual;//99select trunc(99.94,1) from dual;//99.9select trunc(99.96,1) from dual;//99.9select trunc(94.96,-1) from dual;//90select round(99.96,-2) from dual;//100to_char() 字符转换函数to_char(字段) 把那个字段变成字符串按照格局显示数字to_char(字段/值,'格局')fm 格局说明$ 美元符号L 本地泉币符号¥RMB9 随便率性数字0 强迫显示0 100 000,100.00, 国际泉币瓜分符. 小数点select salary ,to_char(salary,'fmL099,999.00')from s_emp;select salary ,to_char(salary,'fmL099,999.99')from s_emp;select userenv('lang') from dual;select to_char(9999.97,'fmL099,999.00') from dual;select to_char(9999.97,'fmL099,999.99') from dual;切换说话情形对显示的本地泉币符号的阻碍对日期格局产生了阻碍select sysdate from dual;SYSDA TE-----------26-APR-12现在切换成中文NLS_LANGbash修改.bash_profileexport NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'source .bash_profile从新进入sqlplusselect userenv('lang') from dual;ZHSselect sysdate from dual;select salary ,to_char(salary,'fmL099,999.00')from s_emp;演习:select first_name, salary,nvl(to_char(manager_id),'''boss''')from s_emp where salary>1000 order by salary desc;把first_name,salary,manager_id 显示出来要求工资大年夜于1000 同时按照工资降序manager_id 假如是NULL则显示manager_id 为'boss'select first_name,salary,nvl(manager_id,'boss')from s_emp where salary>1000order by salary desc;select first_name,salary,nvl(to_char(manager_id),'boss')from s_emp where salary>1000order by salary desc;select first_name,salary,nvl(to_char(manager_id),'''boss''')from s_emp where salary>1000order by salary desc;E 多表查询我们须要的数据不储备在一张表中把每个职员的first_name,dept_id 查询出来select first_name,dept_id from s_emp;部分表s_dept名称是否为空? 类型----------------------------------------- -------- -------------ID 部分id NOT NULL NUMBER(7) NAME 部分名称NOT NULL VARCHAR2(25) REGION_ID 地区id NUMBER(7)地区表s_region名称是否为空? 类型----------------------------------------- -------- --------------ID 地区id NOT NULL NUMBER(7) NAME 地区名称NOT NULL VARCHAR2(50)select * from s_region;select first_name,dept_id,name from s_emp,s_dept;笛卡尔集select first_name,dept_id,name from s_emp,s_deptwhere dept_id=s_dept.id;解决两个表直截了当的关系表的连接:内连接:相符连接前提就放入成果集不相符就过滤掉落等值连接:用等号做两个表的连接select first_name,dept_id,name from s_emp,s_deptwhere dept_id=s_dept.id;把每个部分的名字和地点的地区名称列出来select s_ ,s_from s_dept,s_regionwhere region_id=s_region.id;表的别号select ,from s_dept d,s_region rwhere d.region_id=r.id;非等值连接:不消等号做表的连接desc salgrade 工资级别表名称-------------------GRADE 工资级别LOSAL 低工资HISAL 高工资把s_emp 表中first_name,salary,grade 列一个清单select first_name,salary,gradefrom s_emp e,salgrade gwhere salary between losal and hisal;自连接:须要把一张表算作两张表谁是引导?把s_emp 逻辑上算作两张表然后找出这两张表的关系select distinct m.first_name,m.idfrom s_emp e,s_emp mwhere e.manager_id=m.id;select first_name,idfrom s_emp where manager_id=id;select id,manager_id from s_emp;谁不是引导?select distinct m.first_name,m.id,from s_emp e,s_emp mwhere e.manager_id!=m.id;外连接:外连接的成果集等于内连接的成果集+匹配不上的记录(和直截了当选择出是不合的)<<<----m中没匹配上的对应于e中的Manager_id=NULL>>>>>>>>.一个也不克不及少自连接select distinct m.first_name,m.idfrom s_emp e,s_emp mwhere e.manager_id(+)=m.idand e.manager_id is null;//哪些不是引导select distinct m.first_name,m.idfrom s_emp e,s_emp mwhere e.manager_id(+)=m.idand e.manager_id is not null;scotttigerselect * from s_dept;insert into s_dept values(100,'mytest1',1);commit;s_emp2 中没人在我新增长的部分中把每个职员地点部分名列出来(内连接)select first_name,namefrom s_emp,s_deptwhere dept_id(+)=s_dept.id;依照上面的提示找出没有职员的部分(外连接)select first_name,namefrom s_emp,s_deptwhere dept_id(+)=s_dept.id and dept_id is null;(+) 对面的表的数据全部匹配出来等值连接非等值连接找出每个职员的工资级别first_name,salary,gradeselect first_name,salary,gradefrom s_emp,salgradewhere salary between losal and hisal;update s_emp set salary=12500 where id=1;commit;更新之后老总不相符内连接的连接前提把老总的工资级别显示成10select first_name,salary,nvl(grade,10)from s_emp,salgradewhere salary between losal(+) and hisal(+);外连接的标准实现:sql99left outer join onright outer join onfull outer join on找出那些部分中还没有职员select first_name,namefrom s_emp,s_deptwhere dept_id(+)=s_dept.idand dept_id is null; 《《《精确显示mytest1行》》》》》》那张表提议连接那张表中的数据就被全部匹配出来select first_name,namefrom s_dept left outer join s_emp 《《表示s_dept提议连接,其数据全部显示出来》》》》》on s_dept.id=s_emp.dept_idwhere dept_id is null;《《《精确显示mytest1行》》》》》》select first_name,namefrom s_emp left outer join s_depton s_dept.id=s_emp.dept_idwhere dept_id is null;<<<<<无显示》》》*******************把上面的查询改成右外连接select first_name,namefrom s_emp right outer join s_depton s_dept.id=s_emp.dept_idwhere dept_id is null;《《《精确显示mytest1行》》》》》》full outer join on:全外连接的成果集等于右外连接的成果集+ 左外连接的成果集然后清除反复的记录oracle 不支撑两边都加括号加union 归并两个成果集然后清除反复union all 归并两个成果集select id from s_emp union select id from s_emp;select id from s_emp union all select id from s_emp;sql99 的内连接select first_name,dept_id,name from s_emp,s_deptwhere dept_id=s_dept.id;select first_name,dept_id,name from s_emp inner joins_dept on dept_id=s_dept.id;select first_name,dept_id,name from s_emp joins_dept on dept_id=s_dept.id;内连接把每个职员的first_name,salary,部分名,地区名列出来select first_name,salary,,from s_emp e,s_dept d,s_region rwhere e.dept_id=d.id and d.region_id=r.id;col name for a20select first_name,salary,,from s_emp e join s_dept d on e.dept_id=d.idjoin s_region r on d.region_id=r.id;select first_name,salary,,from s_emp e inner join s_dept d on e.dept_id=d.idinner join s_region r on d.region_id=r.id;update s_emp set dept_id=NULL where id=1;commit;那个老总就不在所有的部分信息中要把所有的职员信息列出来包含老总的话就须要外连接F 组函数和分组组函数能把一组数据处理之后获得一个成果count() 统计个数sum() 乞降avg() 求平均值max() 求最大年夜值min 求最小值group by 分组标准select dept_id,count(id)from s_emp group by dept_id;select count(id) from s_emp where dept_id=44;组函数用在select 后是分组后处理的组函数还能够涌现在having 后边where 对行数据的过滤having 是对组数据的过滤那个部分的人数大年夜于1select dept_id,count(id)from s_emp group by dept_idhaving count(id)>1;按照部分号分组统计每个部分的平均工资select dept_id,avg(salary)from s_emp group by dept_id;按照部分号分组统计每个部分的平均工资找出平均工资大年夜于1200的组select dept_id,avg(salary)from s_emp group by dept_idhaving avg(salary)>1200;select dept_id,avg(salary) asalfrom s_emp group by dept_idhaving avg(salary)>1200order by asal;按照部分号分组统计每个部分的平均工资找出平均工资大年夜于1200的组显示部分名称select dept_id,name,avg(salary) asalfrom s_emp,s_deptwhere dept_id=s_dept.idgroup by dept_idhaving avg(salary)>1200order by asal;因为部分号可不能反复所有在那个分组的标准再追加额外的标准没有阻碍select dept_id,name,avg(salary) asalfrom s_emp,s_deptwhere dept_id=s_dept.idgroup by dept_id,name --》》第一行有name,分组标准里必须有namehaving avg(salary)>1200order by asal;select dept_id,max(name),avg(salary) asalfrom s_emp,s_deptwhere dept_id=s_dept.idgroup by dept_idhaving avg(salary)>1200order by asal;-->> 第一行不max(name) 换成name 会掉足max()感化有时和distinct(去重)类似。
oracle查询语法大全(OraclequerysyntaxDaquan)
oracle查询语法大全(Oracle query syntax Daquan)1。
SELECT * FROM emp;2。
选择编号、姓名,工作从EMP;三.选择empno编号,ename姓名,从工作工作EMP;4。
选择工作从EMP;5。
选择不同的工作,从EMP;6。
选择不同的编号、工作从EMP;说明:因为雇员编号不重复,所以此时证明所有的列没有重复,所以不能消除掉重复的列。
7。
查询出雇员的编号,姓名,工作,但是显示的格式:编号是:7369的雇员,姓名是:史密斯,工作是:清晰选择“编号是:“| | EMPNO | |”的雇员,姓名是:“| | ename | | ',工作是:“| |工作从EMP;8。
求出每个雇员的姓名及年薪选择ename,萨尔* 12收入从EMP;9。
1500的所有雇员信息求出工资大于SELECT * FROM EMP在萨尔> 1500;10。
查询每月可以得到奖金的雇员信息SELECT * FROM EMP,奖金不为空;11。
查询没有奖金的雇员信息SELECT * FROM EMP在公司是空的;12。
1500同时可以领取奖金的雇员信息查询出基本工资大于SELECT * FROM EMP在萨尔> 1500和奖金不为空;13。
1500或者可以领取奖金的雇员信息查询出基本工资大于SELECT * FROM EMP在萨尔> 1500或通信不为空;14。
1500或者不可以领取奖金的雇员信息查询出基本工资不大于SELECT * FROM emp不(Sal > 1500和奖金不为空);15。
查询基本工资大于1500,但是小于3000的全部雇员信息SELECT * FROM EMP在萨尔> 1500和萨尔<3000;16。
查询基本工资大于等于1500,但是小于等于3000的全部雇员信息SELECT * FROM EMP在萨尔> = 1500和萨尔< = 3000;SELECT * FROM EMP在萨尔1500和3000之间;17。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一篇基本操作--解锁用户alter user 用户account unlock;--锁定用户alter user 用户account lock;alter user scott account unlock;--创建一个用户yc 密码为a create user 用户名identified by 密码;create user yc identified by a;--登录不成功,会缺少create session 权限,赋予权限的语法grant 权限名to 用户;grant create session to yc;--修改密码alter user 用户名identified by 新密码;alter user yc identified by b;--删除用户drop user yc ;--查询表空间select *from dba_tablespaces;--查询用户信息select *from dba_users;--创建表空间create tablespace ycspacedatafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf'size 2mautoextend on next 2m maxsize 5moffline ;--创建临时表空间create temporary yctempspacetempfile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf'size 2mautoextend on next 2m maxsize 5moffline ;--查询数据文件select *from dba_data_files;--修改表空间--1、修改表空间的状态--默认情况下是online,只有在非离线情况下才可以进行修改alter tablespace ycspace offline ; --离线状态,不允许任何对象对该表空间的使用,使用情况:应用需要更新或维护的时候;数据库备份的时候alter tablespace ycspace read write;--读写状态alter tablespace ycspace online;alter tablespace ycspace read only; --只读,可以查询信息,可以删除表空间的对象,但是不能创建对象和修改对象。
使用情况:数据存档的时候--2、修改表空间的大小--增加文件的大小alter database datafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\ycspace.dbf' resize 10m;--增加数据文件alter tablespace ycspace add datafile 'E:\oracle\app\product\11.2.0\dbhome_1\oradata\add.dbf' size 2m;--删除表空间的数据文件alter tablespace 表空间的名字drop datafile 数据文件名;--删除表空间drop tablespace ycspace;--删除表空间且表空间中的内容和数据文件drop tablespace ycspace including contents and datafiles;--指定表空间的创建用户的语法create user yc1 identified by a default tablespace ycspace temporary tablespace temp;--删除用户drop user yc1;--权限--赋予创建会话的权限grant create session to yc1;--创建一个表create table studentInfo(sid int,sname varchar2(10)--赋予yc1用户创建表的权限grant create table to yc1;--赋予yc1使用表空间的权限grant unlimited tablespace to yc1;--系统权限--对象权限--插入insert into studentInfo values (2,'abcd');--查询select *from studentInfo;--修改update studentInfo set sid=1;--删除delete studentInfo ;drop table studentInfo; --系统权限删除表--赋权的语法--系统权限grant 权限名(系统权限或对象权限,角色,all) to 用户(角色,public) with admin option;--对象权限grant 权限名(系统权限或对象权限,角色,all) on 用户(角色,public) with grant option;--收权语法--系统权限revoke 权限名(系统权限或对象权限,角色,all) from 用户(角色,public) with admin option; --对象权限revoke 权限名(系统权限或对象权限,角色,all) from 用户(角色,public) with grant option;--赋予创建用户的权限并且把这个权限传递下去,即yc1可以给别人赋权grant create user to yc1 with admin option;--收回权限,只能收回scottd ,不能收回由scott赋权的yc1的权限revoke create user from scott;--查看用户所具有的权限select *from user_sys_privs;--对象权限详解select * from emp;--使用yc1来查询scott里面的emp表select * from scott.emp;--赋予yc1查询emp表和插入的权限grant select on emp to yc1;grant insert on emp to yc1;grant update(empno,ename) on emp to yc1;grant delete on emp to yc1;--对scott的emp表添加数据insert into scott.emp(empno,ename) value(111,'acv');update scott.emp set ename='yc'where empno=111;--赋予查询、赋予删除、添加、修改grant select on 表名to 用户--grant select,delete,update,insert on 表名to 用户grant select,delete,update,insert on emp to yc1;grant all on dept to yc1; --all代表所有的对象权限select *from scott.emp;select *from scott.dept;insert into scott.dept values(50,'企事业文化部','bumen');--查看角色--dba:数据库管理员,系统最高权限,可以创建数据结构(表空间等)--resource:可以创建实体(表、视图),不可以创建数据库的结构--connect:连接的权限,可以登录数据库,但是不可以创建实体和不可以创建数据库结构select *from role_sys_privs;grant connect to yc1;--将可以连接的角色赋予给yc1,则yc1就是应该可以连接数据库的人,类似于create session 。
create table StuInfos(sid int);select *from StuInfos;create table stuInfo(sid int primary key , --主键primary key 非空且唯一(主键约束)sname varchar2(10) not null, --姓名不能为空,(非空约束)sex char(2) check(sex in('男','女')), --(检查约束),check,age number(3,1) constraint ck_stuInfo_age check(age>10 and age<100) , --也可以用varchar ;age between 10 and 100 ,在10和100之间,是一个闭区间tel number(15) unique not null, --唯一约束,address varchar2(200) default '什么鬼')insert into stuInfo values(3,'大大','男',18,4321543,default);insert into stuInfo values(1,'张三','男',10);select *from stuInfo;drop table stuInfo;create table classInfo(cid int primary key, --班级idcname varchar2(20) not null unique --班级名)create table stuInfo(sid int primary key,sname varchar2(20),cid int constraint fofk_stuInfo_cid references classInfo(cid) on delete cascade )insert into classInfo values(1,'1班');insert into classInfo values(2,'2班');insert into classInfo values(3,'3班');insert into classInfo values(4,'4班');select *from classInfo;select *from stuInfo;insert into stuInfo values(1001,'张三',2);insert into stuInfo values(1002,'张四',4);update classInfo set cid=1 where cid=8;drop table stuInfo;--要先删除这个drop table classInfo; --再删除这个delete classInfo where cid=4 ;--同时删除这两个表中的4--删除用户的时候drop user yc1 [cascade] --删除用户的同时把它创建的对象都一起删除--修改表--1、添加表中字段--alter table 表名add 字段名类型alter table classInfo add status varchar2(10) default '未毕业'--2、修改已有字段的数据类型--alter table 表名modify 字段名类型alter table classInfo modify status number(1)--3、修改字段名--alter table 表名rename column 旧字段名to 新的字段名alter table classInfo rename column cname to 班级名;--4、删除字段--alter table 表名drop column 字段名alter table classInfo drop column status ;--5、修改表名--rename 旧表名to 新表名rename classInfo to 班级信息;--删除表--1、截断表效率高,每删除一次会产生一次日志2、截断会释放空间,而delete不会释放空间--删除表结构和数据drop table 表名;--删除表中所有数据truncate table classInfo;delete classInfo;create table classInfo(cid int primary key, --班级idcname varchar2(20) not null unique , --班级名stasuts varchar2(100));select *from classInfo;--数据的操作--增加数据语法--insert into 表名[(列名,....)] values (对应的数据的值);insert into classInfo values(1,'一班','未毕业');--需要按照表结构的顺序插入insert into classInfo values(4,'六班','未毕业');insert into classInfo(cname,cid) values('二班',2); --需要按照括号中的顺序插入,但是not null primary key 必须插入的。