Oracle经典案例代码

合集下载

oracle函数循环写法

oracle函数循环写法

oracle函数循环写法在Oracle数据库中,可以使用PL/SQL(Procedural Language/Structured Query Language)语言来编写存储过程和函数,实现循环等复杂逻辑。

下面将演示在Oracle中使用PL/SQL编写循环的基本写法,以及一些常见的循环类型。

1. 基本循环写法DECLARE--变量声明counter NUMBER:=1;BEGIN--简单循环FOR counter IN1..5LOOP--打印计数器的值DBMS_OUTPUT.PUT_LINE('Counter: '||counter);END LOOP;END;/上述代码演示了一个简单的循环,使用FOR counter IN 1..5 LOOP语句,计数器counter从1递增到5,循环体内打印计数器的值。

2. WHILE 循环DECLARE--变量声明counter NUMBER:=1;BEGIN--WHILE 循环WHILE counter <=5LOOP--打印计数器的值DBMS_OUTPUT.PUT_LINE('Counter: '||counter);--计数器递增counter :=counter +1;END LOOP;END;/这是一个使用WHILE循环的例子,计数器从1开始,当计数器小于等于5时,循环体内执行打印和递增计数器的操作。

3. LOOP 循环DECLARE--变量声明counter NUMBER:=1;BEGIN--LOOP 循环LOOP--打印计数器的值DBMS_OUTPUT.PUT_LINE('Counter: '||counter);--计数器递增counter :=counter +1;--退出条件EXIT WHEN counter >5;END LOOP;END;/在上述例子中,使用LOOP关键字来创建一个无限循环,通过EXIT WHEN语句设定退出条件,当计数器大于5时退出循环。

ORA-03113问题案例

ORA-03113问题案例

ORA-3113错误就是说连接到数据库的网络中断了。

就我的经验来说,出现这个问题的地方可能有两个。

第一,客户机和数据库之间的网络中断了。

第二,数据库中的bug 造成了会话的中断并且客户认为网络错误就造成上述问题的主要原因有些错误由于频繁出现、原因复杂而被Oracle DBA 们戏称之为"经典的错误"。

其中ORA-3113 "end of file on communication channel" 就是这样的一个。

我们可以简单的把这个错误理解为Oracle客户端进程和数据库后台进程连接中断。

不过,导致这个错误的原因实际上有很多种:对数据库设置不当、任何能导致数据库后台进程崩溃的行为都可能产生这个错误。

此外,该错误出现的场景复杂,可能出现在:∙启动的Oracle的时侯∙试图创建数据库的时侯∙试图对数据库进行连接的时侯∙在客户端正在运行SQL/PL/SQL的时侯∙备份/恢复数据库的时侯∙其它一些情况下......错误原因种种根据网络上大家反映的情况来看,错误原因大约有这些:∙Unix核心参数设置不当∙Oracle执行文件权限不正确/环境变量问题∙客户端通信不能正确处理∙数据库服务器崩溃/操作系统崩溃/进程被kill∙Oracle 内部错误∙特定SQL、PL/SQL引起的错误∙空间不够∙防火墙的问题∙其它原因在开始解决问题之前,作如下几件事情:∙回忆一下在出现错误之前你都做了什么操作,越详细越好;∙查看background_dump_dest 目录中的alertSID.log 文件也是你必须要的事情;∙用Google搜索一下,在互联网上有很多信息等着你去发现,不要什么都问别人。

当然, 如果你找到了一些对你更有帮助的东西--这篇文档就不用看了:-)1) Unix核心参数设置不当/ init参数设置不当如果数据库在安装过程中没有设定正确的操作系统核心变量,可能在安装数据库文件的时侯没甚么问题,在创建数据库的时侯常常会出现03113错误。

oracle实例练习

oracle实例练习

oracle实例练习1.用sys账户登录,解锁scott账户代码:Connect sys/orcl@orcl_client AS SYSDBAALTER USER "SCOTT" ACCOUNT UNLOCK2.以scott身份登录数据库conn scott/tiger@orcl3.创建学生表student(sno,sname,sgender,sbirthday,sadd) score(sno,math,english) 代码:create table student(sno char(3),sname varchar2(10),sgender char2(20),sbirthday date,sadd varchar2(50))create table score(sno char(3),math number(4,1),english number(4,1))4.插入记录student插入记录:001,小张,女,1980-8-20,济南002,小王,男,1983-4-1,莱芜003,小李,女,1980-5-20,济南004,小赵,女,1980-5-20,莱芜005, 小孔, 女, 1982-6-18 威海score插入记录:(005没参加考试,800是个进修生,不是学校的正式生)001,90,92002,85,79003,80,94004,78,77800 79, 88代码:alter session set nls_date_format ='YYYY-MM-DD HH24:MI:SS';insert into student values('001','小张','女',to_date('1980-08-20','yyyy-mm-dd'),'济南');insert into student values('002','小王','男',to_date('1983-04-01','yyyy-mm-dd'),'莱芜');insert into student values('003','小李','女',to_date('1980-05-20','yyyy-mm-dd'),'济南');insert into student values('004','小赵','女',to_date('1980-05-20','yyyy-mm-dd'),'莱芜');insert into student values('005','小孔','女',to_date('1982-06-18','yyyy-mm-dd'),'威海');insert into score values('001','90','92');insert into score values('002','85','79');insert into score values('003','80','94');insert into score values('004','78','77');insert into score values('800','79','88');5.a统计各个地区的学生数b计算各个学生的总成绩(数学+英语),并且按照成绩由高到低做出学生的成绩单报告(没考试的学生名字不要出现在报告单上,进修生的成绩也不在报告单上)报告单标题显示:学号姓名数学英语总成绩c计算各个学生的总成绩(数学+英语),并且按照成绩由高到低做出学生的成绩单报告(没考试的学生名字也要出现在报告单上,进修生的成绩不在报告单上)报告单标题显示:学号姓名数学英语总成绩代码:select sadd 地区,count(*) as 人数from student group by saddselect student.sno 学号, sname 姓名, math 数学, english 英语, (math+english) 总成绩from student inner join score on score where student.sno=score.sno order by 总成绩descselect student.sno 学号, sname 姓名, math 数学, english 英语, math+english 总成绩from student left outer join score onstudent.sno=score.sno order by 总成绩desc或select student.sno 学号, sname 姓名, math 数学,english 英语, (math+english) 总成绩from student,score where student.sno=score.sno(+) order by 总成绩desc;6.根据student表,创建一个新表student_copy(结构相同,数据只有济南的两个学生)从student表中查出莱芜得同学信息,插入到student_copy表中commit//提交刚才的插入代码:create table student_copy as select * from student Where sadd='济南';insert into student_copy(select * from student where sadd='莱芜');commit;7.插入一条新的学生纪录:006 小林男1979-7-9 泰安savepoint a //设置保存点a删除掉学号为003的学生纪录(误删)rollback to savepoint a察看结果commit(提交插入纪录的操作)/rollback(回滚到插入006记录前的数据状态)代码:insert into student values('006','小林','男',to_date('1979-07-09','yyyy-mm-dd'),'泰安');select * from student;savepoint a;delete from student where sno='003';rollback to savepoint a;select * from student;commit;/rollback;8.修改student_copy表名为student2删除表student2的数据(注意delete/truncate的区别)删除表student,score,student2代码:rename student_copy to student2;delete from student2;rollback;select * from student2;truncate table student2;rollback;select * from student2;drop table student;drop table score;drop table student2;9.创建100个表,table_0到table_99,分别插入数据,第1条数据插入到第1个表。

Oracle_存储过程exception异常处理大全及实例经典最终

Oracle_存储过程exception异常处理大全及实例经典最终

Oracle_存储过程exception异常处理大全及实例经典最终异常处理是编程中非常重要的一部分,它允许我们处理代码中可能出现的错误和异常情况,以确保程序的稳定性和正确性。

在Oracle存储过程中,我们可以使用异常处理来捕获并处理各种类型的异常。

下面是Oracle存储过程中常见的一些异常以及它们的处理方式:1.NO_DATA_FOUND:当SELECT语句或游标未找到任何数据时引发此异常。

通常使用一个特殊值或条件来处理这种异常,例如使用NULL值或设置默认值。

示例:```sqlDECLAREv_data NUMBER;BEGINSELECT column INTO v_data FROM table WHERE condition;--处理数据EXCEPTIONWHENNO_DATA_FOUNDTHENv_data := 0; -- 设置默认值为0END;```2.TOO_MANY_ROWS:当SELECT语句或游标返回多行数据时引发此异常。

通常使用限制条件来确保只返回一行数据,或者使用游标来处理多行数据。

示例:```sqlDECLARECURSOR c_data IS SELECT column FROM table WHERE condition;v_data NUMBER;BEGINOPEN c_data;FETCH c_data INTO v_data;IF c_data%FOUND THEN--处理数据...ELSE--处理异常情况...ENDIF;CLOSE c_data;EXCEPTIONWHENTOO_MANY_ROWSTHEN--处理异常情况...END;```3.DUP_VAL_ON_INDEX:当INSERT或UPDATE语句违反唯一性约束时引发此异常。

通常使用异常处理块来处理该异常或使用MERGE语句来处理重复数据。

示例:```sqlBEGININSERT INTO table (column1, column2) VALUES (value1, value2);EXCEPTIONWHENDUP_VAL_ON_INDEXTHEN--处理异常情况...END;```4.VALUE_ERROR:当数据类型转换错误或算术溢出时引发此异常。

oracle查询实例命令

oracle查询实例命令

oracle查询实例命令以下是一些Oracle数据库中常用的查询实例命令示例:1.查询表的所有数据:SELECT * FROM table_name;2.查询指定列的数据:SELECT column1, column2, ... FROM table_name;3.查询满足特定条件的数据:SELECT * FROM table_name WHERE condition;4.对结果进行排序:SELECT * FROM table_name ORDER BY column_name [ASC|DESC];5.使用聚合函数进行数据统计:SELECT COUNT(*) FROM table_name; -- 统计行数SELECT SUM(column_name) FROM table_name; -- 求和SELECT AVG(column_name) FROM table_name; -- 平均值SELECT MAX(column_name) FROM table_name; -- 最大值SELECT MIN(column_name) FROM table_name; -- 最小值6.连接多个表进行查询:SELECT t1.column1, t2.column2 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id;7.使用条件进行分组:SELECT column1, COUNT(*) FROM table_name GROUP BY column1;8.使用LIKE进行模糊查询:SELECT * FROM table_name WHERE column_name LIKE 'keyword%';以上只是一些常见的查询示例,实际查询命令会根据具体的表结构和查询需求而有所不同。

在使用Oracle数据库时,请根据具体情况和需求构建和调整查询语句。

C#Oracle数据库操作类实例详解

C#Oracle数据库操作类实例详解

C#Oracle数据库操作类实例详解本⽂所述为C#实现的Oracle数据库操作类,可执⾏超多常⽤的Oracle数据库操作,包含了基础数据库连接、关闭连接、输出记录集、执⾏Sql语句,返回带分页功能的dataset 、取表⾥字段的类型和长度等,同时还有哈稀表⾃动插⼊数据库等⾼级任务。

需要特别指出的是:在执⾏SQL语句,返回 DataReader之前⼀定要先⽤.read()打开,然后才能读到数据,再⽤hashTable对数据库进⾏insert,update,del操作,注意此时只能⽤默认的数据库连接"connstr"。

本⽂所述为C#实现的Oracle数据库操作类,可执⾏超多常⽤的Oracle数据库操作,包含了基础数据库连接、关闭连接、输出记录集、执⾏Sql语句,返回带分页功能的dataset 、取表⾥字段的类型和长度等,同时还有哈稀表⾃动插⼊数据库等⾼级任务。

需要特别指出的是:在执⾏SQL语句,返回 DataReader之前⼀定要先⽤.read()打开,然后才能读到数据,再⽤hashTable对数据库进⾏insert,update,del操作,注意此时只能⽤默认的数据库连接"connstr"。

完整的C# Oracle数据库类实例代码如下:using System;using System.Data;using System.Data.OracleClient;using System.Collections;using System.Reflection;namespace MyOraComm{/// ConnDbForOracle 的摘要说明。

public class ConnForOracle{protected OracleConnection Connection;private string connectionString;public ConnForOracle(){string connStr;connStr = System.Configuration.ConfigurationSettings.AppSettings["connStr"].ToString();connectionString = connStr;Connection = new OracleConnection(connectionString);}#region 带参数的构造函数/// 带参数的构造函数/// 数据库联接字符串public ConnForOracle(string ConnString){string connStr;connStr = System.Configuration.ConfigurationSettings.AppSettings[ConnString].ToString();Connection = new OracleConnection(connStr);}#endregion#region 打开数据库/// 打开数据库public void OpenConn(){if(this.Connection.State!=ConnectionState.Open)this.Connection.Open();}#endregion#region 关闭数据库联接/// 关闭数据库联接public void CloseConn(){if(Connection.State==ConnectionState.Open)Connection.Close();}#endregion#region 执⾏SQL语句,返回数据到DataSet中/// 执⾏SQL语句,返回数据到DataSet中/// sql语句/// ⾃定义返回的DataSet表名/// 返回DataSetpublic DataSet ReturnDataSet(string sql,string DataSetName){DataSet dataSet=new DataSet();OpenConn();OracleDataAdapter OraDA=new OracleDataAdapter(sql,Connection);OraDA.Fill(dataSet,DataSetName);// CloseConn();return dataSet;}#endregion/// Sql语句/// 每页显⽰记录数/// <当前页/param>/// 返回dataset表名/// 返回DataSetpublic DataSet ReturnDataSet(string sql,int PageSize,int CurrPageIndex,string DataSetName){DataSet dataSet=new DataSet();OpenConn();OracleDataAdapter OraDA=new OracleDataAdapter(sql,Connection);OraDA.Fill(dataSet,PageSize * (CurrPageIndex - 1), PageSize,DataSetName);// CloseConn();return dataSet;}#endregion#region 执⾏SQL语句,返回 DataReader,⽤之前⼀定要先.read()打开,然后才能读到数据/// 执⾏SQL语句,返回 DataReader,⽤之前⼀定要先.read()打开,然后才能读到数据/// sql语句/// 返回⼀个OracleDataReaderpublic OracleDataReader ReturnDataReader(String sql){OpenConn();OracleCommand command = new OracleCommand(sql,Connection);return command.ExecuteReader(mandBehavior.CloseConnection);}#endregion#region 执⾏SQL语句,返回记录总数数/// 执⾏SQL语句,返回记录总数数/// sql语句/// 返回记录总条数public int GetRecordCount(string sql){int recordCount = 0;OpenConn();OracleCommand command = new OracleCommand(sql,Connection);OracleDataReader dataReader = command.ExecuteReader();while(dataReader.Read()){recordCount++;}dataReader.Close();//CloseConn();return recordCount;}#endregion#region 取当前序列,条件为seq.nextval或seq.currval////// 取当前序列public decimal GetSeq(string seqstr){decimal seqnum = 0;string sql="select "+seqstr+" from dual";OpenConn();OracleCommand command = new OracleCommand(sql,Connection);OracleDataReader dataReader = command.ExecuteReader();if(dataReader.Read()){seqnum=decimal.Parse(dataReader[0].ToString());}dataReader.Close();// CloseConn();return seqnum;}#endregion#region 执⾏SQL语句,返回所影响的⾏数/// 执⾏SQL语句,返回所影响的⾏数public int ExecuteSQL(string sql){int Cmd=0;OpenConn();OracleCommand command = new OracleCommand(sql,Connection);try{Cmd =command.ExecuteNonQuery(); //ExecuteNonQuery⽅法,返回受影响的⾏数,适⽤于insert/update/delete }catch{}}return Cmd;}#endregion//==⽤hashTable对数据库进⾏insert,update,del操作,注意此时只能⽤默认的数据库连接"connstr"#region 根据表名及哈稀表⾃动插⼊数据库⽤法:Insert("test",ht)public int Insert(string TableName,Hashtable ht){OracleParameter[] Parms=new OracleParameter[ht.Count];IDictionaryEnumerator et = ht.GetEnumerator();DataTable dt=GetTabType(TableName);System.Data.OracleClient.OracleType otype;int size=0;int i=0;while ( et.MoveNext() ) // 作哈希表循环{GetoType(et.Key.ToString().ToUpper(),dt,out otype,out size);System.Data.OracleClient.OracleParameter op=MakeParam(":"+et.Key.ToString(),otype,size,et.Value.ToString()); Parms[i]=op; // 添加SqlParameter对象i=i+1;}string str_Sql=GetInsertSqlbyHt(TableName,ht); // 获得插⼊sql语句int val=ExecuteNonQuery(str_Sql,Parms);return val;}#endregion#region 根据相关条件对数据库进⾏更新操作⽤法:Update("test","Id=:Id",ht);public int Update(string TableName,string ht_Where, Hashtable ht){OracleParameter[] Parms=new OracleParameter[ht.Count];IDictionaryEnumerator et = ht.GetEnumerator();DataTable dt=GetTabType(TableName);System.Data.OracleClient.OracleType otype;int size=0;int i=0;// 作哈希表循环while ( et.MoveNext() ){GetoType(et.Key.ToString().ToUpper(),dt,out otype,out size);System.Data.OracleClient.OracleParameter op=MakeParam(":"+et.Key.ToString(),otype,size,et.Value.ToString()); Parms[i]=op; // 添加SqlParameter对象i=i+1;}string str_Sql=GetUpdateSqlbyHt(TableName,ht_Where,ht); // 获得插⼊sql语句int val=ExecuteNonQuery(str_Sql,Parms);return val;}#endregion#region del操作,注意此处条件个数与hash⾥参数个数应该⼀致⽤法:Del("test","Id=:Id",ht)public int Del(string TableName,string ht_Where,Hashtable ht){OracleParameter[] Parms=new OracleParameter[ht.Count];IDictionaryEnumerator et = ht.GetEnumerator();DataTable dt=GetTabType(TableName);System.Data.OracleClient.OracleType otype;int i=0;int size=0;// 作哈希表循环while ( et.MoveNext() ){GetoType(et.Key.ToString().ToUpper(),dt,out otype,out size);System.Data.OracleClient.OracleParameter op=MakeParam(":"+et.Key.ToString(),et.Value.ToString());Parms[i]=op; // 添加SqlParameter对象i=i+1;}string str_Sql=GetDelSqlbyHt(TableName,ht_Where,ht); // 获得删除sql语句int val=ExecuteNonQuery(str_Sql,Parms);return val;}#endregion// ========上⾯三个操作的内部调⽤函数==================#region 根据哈稀表及表名⾃动⽣成相应insert语句(参数类型的)/// 根据哈稀表及表名⾃动⽣成相应insert语句/// 要插⼊的表名/// 哈稀表/// 返回sql语句int i=0;int ht_Count=ht.Count; // 哈希表个数IDictionaryEnumerator myEnumerator = ht.GetEnumerator();string before="";string behide="";while ( myEnumerator.MoveNext() ){if (i==0){before="("+myEnumerator.Key;}else if (i+1==ht_Count){before=before+","+myEnumerator.Key+")";}else{before=before+","+myEnumerator.Key;}i=i+1;}behide=" Values"+before.Replace(",",",:").Replace("(","(:");str_Sql="Insert into "+TableName+before+behide;return str_Sql;}#endregion#region 根据表名,where条件,哈稀表⾃动⽣成更新语句(参数类型的)public static string GetUpdateSqlbyHt(string Table,string ht_Where,Hashtable ht){string str_Sql="";int i=0;int ht_Count=ht.Count; // 哈希表个数IDictionaryEnumerator myEnumerator = ht.GetEnumerator();while ( myEnumerator.MoveNext() ){if (i==0){if (ht_Where.ToString().ToLower().IndexOf((myEnumerator.Key+"=:"+myEnumerator.Key).ToLower())==-1) {str_Sql=myEnumerator.Key+"=:"+myEnumerator.Key;}}else{if (ht_Where.ToString().ToLower().IndexOf((":"+myEnumerator.Key+" ").ToLower())==-1){str_Sql=str_Sql+","+myEnumerator.Key+"=:"+myEnumerator.Key;}}i=i+1;}if (ht_Where==null || ht_Where.Replace(" ","")=="") // 更新时候没有条件{str_Sql="update "+Table+" set "+str_Sql;}else{str_Sql="update "+Table+" set "+str_Sql+" where "+ht_Where;}str_Sql=str_Sql.Replace("set ,","set ").Replace("update ,","update ");return str_Sql;}#endregion#region 根据表名,where条件,哈稀表⾃动⽣成del语句(参数类型的)public static string GetDelSqlbyHt(string Table,string ht_Where,Hashtable ht){string str_Sql="";int i=0;int ht_Count=ht.Count; // 哈希表个数IDictionaryEnumerator myEnumerator = ht.GetEnumerator();while ( myEnumerator.MoveNext() ){if (i==0){if (ht_Where.ToString().ToLower().IndexOf((myEnumerator.Key+"=:"+myEnumerator.Key).ToLower())==-1) {str_Sql=myEnumerator.Key+"=:"+myEnumerator.Key;}if (ht_Where.ToString().ToLower().IndexOf((":"+myEnumerator.Key+" ").ToLower())==-1){str_Sql=str_Sql+","+myEnumerator.Key+"=:"+myEnumerator.Key;}}i=i+1;}if (ht_Where==null || ht_Where.Replace(" ","")=="") // 更新时候没有条件{str_Sql="Delete "+Table;}else{str_Sql="Delete "+Table+" where "+ht_Where;}return str_Sql;}#endregion#region ⽣成oracle参数////// ⽣成oracle参数/// 字段名/// 数据类型/// 数据⼤⼩/// 值public static OracleParameter MakeParam(string ParamName,System.Data.OracleClient.OracleType otype,int size,Object Value) {OracleParameter para=new OracleParameter(ParamName,Value);para.OracleType=otype;para.Size=size;return para;}#endregion#region ⽣成oracle参数public static OracleParameter MakeParam(string ParamName,string Value){return new OracleParameter(ParamName, Value);}#endregion#region 根据表结构字段的类型和长度拼装oracle sql语句参数public static void GetoType(string key,DataTable dt,out System.Data.OracleClient.OracleType otype,out int size){DataView dv=dt.DefaultView;dv.RowFilter="column_name='"+key+"'";string fType=dv[0]["data_type"].ToString().ToUpper();switch (fType){case "DATE":otype= OracleType.DateTime;size=int.Parse(dv[0]["data_length"].ToString());break;case "CHAR":otype= OracleType.Char;size=int.Parse(dv[0]["data_length"].ToString());break;case "LONG":otype= OracleType.Double;size=int.Parse(dv[0]["data_length"].ToString());break;case "NVARCHAR2":otype= OracleType.NVarChar;size=int.Parse(dv[0]["data_length"].ToString());break;case "VARCHAR2":otype= OracleType.NVarChar;size=int.Parse(dv[0]["data_length"].ToString());break;default:otype= OracleType.NVarChar;size=100;break;}}#endregion#region动态取表⾥字段的类型和长度,此处没有动态⽤到connstr,是默认的!by/⽂少public System.Data.DataTable GetTabType(string tabnale){string sql="select column_name,data_type,data_length from all_tab_columns where table_name='"+tabnale.ToUpper()+"'";OpenConn();return (ReturnDataSet(sql,"dv")).Tables[0];public int ExecuteNonQuery(string cmdText, params OracleParameter[] cmdParms) {OracleCommand cmd = new OracleCommand();OpenConn();cmd.Connection=Connection;mandText = cmdText;if (cmdParms != null){foreach (OracleParameter parm in cmdParms)cmd.Parameters.Add(parm);}int val = cmd.ExecuteNonQuery();cmd.Parameters.Clear();//conn.CloseConn();return val;}#endregion}}。

oracle 存储过程优秀例子

oracle 存储过程优秀例子

oracle 存储过程优秀例子Oracle存储过程是一种在数据库中存储和执行SQL语句的过程。

它可以接受参数并返回结果,用于实现复杂的业务逻辑和数据操作。

下面是10个优秀的Oracle存储过程示例,展示了不同方面的功能和用法。

1. 创建表并插入数据```sqlCREATE PROCEDURE create_employee_table ASBEGINEXECUTE IMMEDIATE 'CREATE TABLE employee (id NUMBER, name VARCHAR2(100))';EXECUTE IMMEDIATE 'INSERT INTO employee VALUES (1, ''John Doe'')';EXECUTE IMMEDIATE 'INSERT INTO employee VALUES (2, ''Jane Smith'')';END;```这个存储过程创建了一个名为employee的表,并插入了两条数据。

2. 更新员工姓名```sqlCREATE PROCEDURE update_employee_name(p_id NUMBER,p_name VARCHAR2) ASBEGINUPDATE employee SET name = p_name WHERE id = p_id;COMMIT;END;```这个存储过程接受员工的ID和新的姓名作为参数,然后更新对应员工的姓名。

3. 删除员工记录```sqlCREATE PROCEDURE delete_employee(p_id NUMBER) AS BEGINDELETE FROM employee WHERE id = p_id;COMMIT;END;```这个存储过程接受员工的ID作为参数,然后删除对应的员工记录。

c++连接oracle数据库经典例子occi

c++连接oracle数据库经典例子occi
cout << "loginname: " << rs->getString (3) << "\t" ;
cout << "createdate: " << rs->getString (4) << endl;
}
}catch(SQLException ex)
{
cout<<"Exception thrown for displayAllRows"<<endl;
cout << "createdate: " << rs->getString (4) << endl;
}
}catch(SQLException ex)
{
cout<<"Exception thrown for displayAllRows"<<endl;
cout<<"Error number: "<< ex.getErrorCode() << endl;
}catch(SQLException ex)
{
cout<<"Exception thrown for deleteRow"<<endl;
cout<<"Error number: "<< ex.getErrorCode() << endl;
cout<<ex.getMessage() << endl;

python操作oracle数据库的简单方法和封装类实例

python操作oracle数据库的简单方法和封装类实例

python操作oracle数据库的简单方法和封装类实例Python提供了多种方法来操作Oracle数据库,包括使用第三方库进行操作和使用标准库中的模块进行操作。

1. 使用cx_Oracle库进行操作:cx_Oracle是Python官方提供的一个Oracle数据库连接库。

可以使用pip命令进行安装。

使用cx_Oracle连接数据库的一般步骤如下:1. 导入cx_Oracle库:import cx_Oracle3. 创建游标对象:cursor = conn.cursor4. 执行SQL语句:cursor.execute('SELECT * FROM 表名')5. 获取查询结果:result = cursor.fetchall6. 关闭游标和连接:cursor.close(; conn.close以下是一个使用cx_Oracle库操作Oracle数据库的示例:```pythonimport cx_Oracledef query_data(:cursor = conn.cursorcursor.execute('SELECT * FROM 表名')result = cursor.fetchallcursor.closeconn.closereturn resultdef insert_data(data):cursor = conn.cursorcursor.execute('INSERT INTO 表名 VALUES (:1, :2)', data)cursor.closeconn.closeresult = query_dataprint(result)insert_data(('值1', '值2'))```2. 封装类操作Oracle数据库:为了方便使用,可以将数据库操作封装成一个类,提供常用的数据库操作方法,例如查询、插入、更新和删除等。

oracle if控制语句经典实例及详解

oracle if控制语句经典实例及详解

Oracle条件分支语句使用案例pl/sql中提供了三种条件分支语句if---then,if---then---else,if--then---elsif---else。

这里需要注意一个细节(细节决定成败):elsif而不是elseif。

一:简单的条件判断:if--then案例1:编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加10%。

create or replace procedure sp_p2(spName varchar2) isv_sal emp.sal%type;beginselect sal into v_sal from emp where ename=spName;if v_sal<2000 thenupdate emp set sal=sal*1.1 where ename=spName;end if;end;案例2:修改emp表的数据,把那些小于2000的员工工资增加10%,并把更新前后的工资显示出来。

create or replace procedure sp_p2(spName varchar2) is --执行存储过程时要用的变量。

v_sal emp.sal%type;v_sal1 emp.sal%type; --定义两个与emp表中sal列的字符类型相同。

beginselect sal into v_sal from emp where ename=spName;--把得到的数据存到变量里边。

if v_sal<2000 thenupdate emp set sal=sal*1.1 where ename=spName;select sal into v_sal1 from emp where ename=spName;dbms_output.put_line('旧工资为:'||v_sal); --表的列不能在这里用,需要通过定义变量和存储值来实现。

oracle pivot in使用参数

oracle pivot in使用参数

oracle pivot in使用参数下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by the editor. I hope that after you download them, they can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, our shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!在数据库管理和数据分析领域,Oracle的PIVOT功能是一个极为强大的工具,能够将行数据转换为列数据,使得数据的分析和可视化更加方便。

Oracle错误代码案例总结及解决方案

Oracle错误代码案例总结及解决方案

常见错误:ORA-00001:违反唯一约束条件(主键错误)ORA—00028:无法连接数据库进程ORA—00900:无效sql语句ORA—00904:字段名写错或是建表时最后一个字段有逗号ORA-00907:缺少右括号ORA—00911:无效字符ORA—00917:缺少逗号ORA-00918:未明确定义列ORA-00922:丢失或无效的选项(表名等可能有空格)ORA—00923:未找到FROM关键字ORA—00926:缺少valueORA—00933: SQL命令未正确结束ORA—00936:缺少表达式ORA—00937:不是单组分组函数ORA—00942:表或视图不存在ORA-00947:没有足够的值(一般是插入语句出现的错,插入值的数量与字段不符)ORA-00979:不是group by的表达式ORA—01009:缺少法定参数(eg:sql做参数时,且sql语句为空时,报错)ORA-01098:数据库无法关闭及启动ORA—01400:无法将null值插入ORA—01401:插入的值对于列过大ORA-01476:sql中存在除数为零ORA—01579: 恢复过程中出现写错误ORA—01580: 创建控制备份文件时出错ORA-01581: 尝试使用已分配的回退段() 新区()ORA-01582:无法打开要备份的控制文件ORA—01583: 无法获得要备份的控制文件的块大小ORA-01584:无法获得要备份的控制文件的文件大小ORA-01585: 标识备份文件时出错ORA-01586: 无法打开要备份的目标文件ORA-01587: 复制控制文件的备份文件时出错ORA-01588:要打开数据库则必须使用RESETLOGS 选项ORA-01589: 要打开数据库则必须使用RESETLOGS 或NORESETLOGS 选项ORA-01590:段可用列表数()超出最大数ORA—01591:锁定已被有问题的分配事务处理挂起ORA—01592:将第7 版回退段() 转换为Oracle 8 版格式时出错ORA—01593: 回退段最佳大小(blks) 小于计算的初始大小( blks)ORA—01594: 尝试放回已释放的回退段()区()ORA-01595:释放区() 回退段()时出错ORA—01596: 无法在参数中指定系统ORA-01597:无法改变联机或脱机系统回退段ORA-01598: 回退段''未联机ORA-01599: 无法获得回退段(), 高速缓存空间已满ORA—01600: 至多只有一个””在子句""()中ORA-01601: 子句””()中的存储桶大小非法ORA-01603:子句"”()中的分组大小非法ORA—01604: 子句”"()中的编号范围非法ORA—01605: 子句”"()中缺少编号ORA—01606: gc_files_to_locks 不同于另一已安装例程的参数ORA-01608:无法将回退段’'联机,其状态为()ORA-01609:日志是线程的当前日志—无法删除成员ORA—01610: 使用BACKUP CONTROLFILE 选项的恢复必须已完成ORA-01611: 线程编号无效- 必须介于1 和之间ORA-01612: 线程已经启用ORA—01613:线程只有日志- 要求至少启用2 个日志ORA-01614:线程正忙- 无法启用ORA—01615: 线程已安装—无法禁用ORA-01616: 线程已打开—无法禁用ORA-01617: 无法安装: 不是有效的线程编号ORA-01618: 线程未启用- 无法安装ORA—01619:线程已由另一例程安装ORA-01620: 没有可用于安装的公用线程ORA-01621:数据库打开时无法重命名当前日志的成员ORA—01622: 必须指定线程编号- 没有特定默认值ORA-01623: 日志是线程的当前日志- 无法删除ORA—01624: 线程的紧急恢复需要日志ORA-01625:回退段'’不属于此例程ORA—01626:回退段号''无法处理更多事务处理ORA—01627: 回退段号''未联机ORA—01628: 已达到max # extents ()(回退段)ORA-01629: 已达到max #extents (),此时正在保存表空间的撤消ORA—01630: 表空间中的temp 段达到max #extents()ORA-01631:表。

Oracle数据库运维案例介绍

Oracle数据库运维案例介绍

14:29
.......
1 gc buffer busy acquire 278 20170805 14:57 1 gc buffer
busy release 300 20170805 14:57 1 gc cr block lost 6
20170805 14:57 1 gc buffer busy acquire 184 20170805
Oracle数据库运维案例介绍
技术创新 变革未来
Sat Oct 08 16:14:10 2016 IPC Send timeout detected. Sender: ospid 11292 [oracle@xxxx (LMS3)] Receiver: inst 1 binc 429417348 ospid 11405 …… IPC Send timeout detected. Sender: ospid 11278 [oracle@xxxx (LMD0)] Receiver: inst 1 binc 429417294 ospid 11388 IPC Send timeout to 1.0 inc 10 for msg type 65518 from opid 12 Sat Oct 08 16:14:51 2016 IPC Send timeout detected. Sender: ospid 11270 [oracle@xxxx (PING)] Receiver: inst 1 binc 429417288 ospid 11376 Sat Oct 08 16:14:59 2016 Detected an inconsistent instance membership by instance 2 Evicting instance 1 from cluster

oracle常见错误及代码

oracle常见错误及代码

1、ORA-12541:TNS:没有监听器原因:没有启动监听器或者监听器损坏。

若是前者,使用命令net start OracleOraH ome10gTNSListener(名字可能有出入)即可;如果是后者,则使用“Net Configuration Assistant”工具向导之“监听程序配置”增加一个监听器即可(基本不用写任何信息,一路O K。

在添加之前可能需要把所有的监听器先删!)2、ORA-12500:TNS:监听程序无法启动专用服务器进程或ORA-12560:TNS:协议适配器错误原因:ORACLE的数据库服务没有启动。

使用命令net start ORACLESERVICEORA DB(ORADB为数据库名字)即可。

如果仍没有解决,请继续向下看。

3、如果数据库服务启动失败,则很有可能是其注册表项值损坏,最好的做法是以下两步:1)ORADIM -DELETE -SID oradb 删除数据库服务项2)ORADIM -NEW -SID oradb 新增数据库服务项注:这个过程中如果出错,就重启计算机!4、ORA-12154:TNS:能解析服务名原因:ORACLE的网络服务名没有正确配置。

请使用“Net8 Configuration Assistan t”工具向导之“本地网络服务名配置”配置TNS即可。

如果仍没有解决,请继续向下看。

5、ORA-1034 :TNS:ORACLE不可用原因:ORACLE的数据库服务正确启动,但是数据库没有打开!使用命令:1)svrmgrl 启动服务管理器2)connect internal 以internal身份登陆3)startup 打开数据库6、ORA-12560:TNS:协议适配器错误(顽固性的)原因:未知。

解决:必杀技--打开“Windows任务管理器”,杀死ORACLE.exe及ORADIM.exe进程,书写自己的ora_startup.bat,执行之!PS:1、ora_startup.bat:net start OracleOraHome81TNSListenernet start ORACLESERVICEORADBsvrmgrl 一般情况下不用,不过有时少不了它的,具体步骤见第5步。

经典_Oracle的sql语句百例训练

经典_Oracle的sql语句百例训练

经典_Oracle的sql语句百例训练oracle系列《一》:简单sql与单行函数使用scott/tiger用户下的emp表和dept表中顺利完成以下练,表的结构表明如下dept部门表(deptno部门编号/dname部门名称/loc地点)工资=薪金+佣金登入oracle数据库1、sqlplusscott/tiger2、sqlplus/nologsql>connscott/tiger若是使用sys的账号进行登录的话,则使用以下语句sql>conn/assysdba【1】emp表中内容查阅sql>select*fromemp;失效,原因就是没找出该表中,因为该表时scott用户的表中,所以查阅时必须加之scott.emp就可以了【2】显示当前用户sql>showuser【3】查看当前用户的所有表sql>select*fromtab;【4】若想重复继续执行上一条sql语句,则在sqlplus命令行下输出\即可【5】查询一张表的结构,例如dept表sql>descdept【6】在雇员表查阅雇员的编号、姓名、工作sql>selectempno,ename,jobfromemp;【7】可以为列名取别名,在linux下oracle如果英文别名不加上双引号则会变成大写sql>selectempno编号,ename姓名,job工作fromemp;【8】查询所有的工作sql>selectdistinctjobfromemp;工作可能会重复,加之distinct关键字【9】若要求按照以下的格式进行结果输出,如no:7469,name:smith,job:clerksql>select'no:'||empno||',name:'||ename||',job:'||jobfromemp;【10】建议列举每个雇员的姓名及年薪【11】查看每月可以得到奖金的雇员信息【12】建议基本工资大于1500,同时可以申领奖金的雇员信息【13】查询基本工资不大于1500,同时不可以领取奖金的雇员信息【14】查阅在1981年雇用的全部雇员信息,between..and涵盖等同于的情况sql>select*fromempwherehiredatebetween'01-jan-81'and'31-dec-81';【15】oracle对大小敏感,所以查询时名字要区分大小写【16】建议查阅出来雇员编号不是7369、7499的雇员信息sql>select*fromempwhereempnonotin(7369,7499);【17】sql中like语句必须特别注意通配符%和_sql>select*fromempwherehiredatelike'?%';【18】查阅雇员编号不是7369的雇员信息,采用<>或!=sql>select*fromempwhereempno<>7369;【19】要求对雇员的工资由低到高进行排序,升序为默认(asc),降序(desc)sql>select*fromempgroupbysal;【20】查阅出来部门号为10的雇员信息,查阅的信息按照工资从低至高,若工资成正比则按雇佣日期从早到晚排序sql>select*fromempwheredeptno=10groupbysaldesc,hiredateasc;数据库系统中,每个数据库之间区别最小的就是在函数的积极支持上,单行函数就是最简单的函数,单行函数分成1、字符函数:接受字符输入并且返回字符或数值2、数值函数:接受数值输入并返回数值3、日期函数:对日期型数据进行操作4、切换函数:将一种数据初始化为另一种数据类型5、通用型函数:nvl、decode函数字符函数:【1】大小写切换upper和lowersql>selectupper('smith')fromdual;【2】将雇员姓名变为开头字母大写,initcapsql>selectinitcap(ename)fromemp;字符函数中存有相连接函数concat,但不如||不好用,除了字符串处置的一些函数字符串撷取:substr()字符串长度:length()内容替代:replace()sql>selectsubstr('hello',1,3),length('hello'),replace('hello','l','x')fromdual;这里注意的是oracle中字符串截取从0和从1开始都是一样的,谨防面试提问【3】建议表明所有雇员的姓名及姓名的后3个字符sql>selectename,substr(ename,length(ename)-2)fromemp;以上操作显得较为麻烦,substr()函数是可以倒着截取sql>selectename,substr(ename,-3,3)fromemp;数值函数:1、四舍五入:round()2、截断小数位:trunc()3、取余(取模):modsql>selectround(789.536)fromdual;【1】保留2位小数,(如果是-2则对整数进行四舍五入,变为800了)sql>selectround(783.56,2)fromdual;【2】使用mod()函数进行取余操作sql>selectmod(10,3)fromdual;日期函数:1、日期-数字=日期2、日期+数字=日期3、日期-日期=数字(天数)【1】求出当前日期sql>selectsysdatefromdual;oracle提供了以下的日期函数支持:months_between():谋出来给定日期范围的月数add_months():在指定日期上加上指定的月数,求出之后的日期next_day():下一个的今天的日期last_day():谋出来给定日期的最后一天日期【2】求出从雇用日期到今天所有雇员的雇员编号、姓名和月数sql>selectempno,ename,round(months_between(sysdate,hiredate))fromemp;。

oracle高级查询案例

oracle高级查询案例

oracle高级查询案例介绍如下:
以下是一个Oracle 高级查询案例,用于查询订单数量最多的前5个客户和他们的订单总金额。

SELECT c.customer_name, COUNT(o.order_id) AS order_count, SUM(o.order_total) AS order_total_amount FROM customers c INNER JOIN orders o ON c.customer_id = o.customer_id GROUP BY c.customer_name ORDER BY order_count DESC FETCH FIRST 5 ROWS ONLY;
在这个查询中,我们使用了INNER JOIN 连接customers 表和orders 表,然后使用GROUP BY 子句对客户名进行分组,使用COUNT 函数计算每个客户的订单数量,使用SUM 函数计算每个客户的订单总金额,并使用ORDER BY 子句按照订单数量降序排列。

最后使用FETCH FIRST 5 ROWS ONLY 来限制结果集的大小,只返回前5个客户的结果。

这个查询可以帮助企业了解他们最有价值的客户和他们的订单情况,从而优化销售和营销策略,提高企业的盈利能力。

代码实现oracle插入特殊符号

代码实现oracle插入特殊符号

代码实现Oracle插入特殊符号1. 背景介绍在进行数据库操作时,有时候需要插入一些特殊符号,比如单引号、双引号、反斜杠等。

然而在Oracle数据库中,直接插入这些特殊符号会导致SQL语句出错,因此需要对插入的数据进行一些特殊处理,以确保数据的完整性和正确性。

2. 插入单引号在插入带有单引号的数据时,需要将单引号转义成两个单引号,例如:```INSERT INTO table_name (column1) VALUES ('This is a''s test');```3. 插入双引号在插入带有双引号的数据时,同样需要将双引号转义成两个双引号,例如:```INSERT INTO table_name (column1) VALUES ('This is a ""test');```4. 插入反斜杠对于反斜杠,同样需要进行转义处理,例如:```INSERT INTO table_name (column1) VALUES ('This is a \\test');```5. 使用Oracle内置函数进行转义除了手动进行转义处理外,Oracle也提供了一些内置函数来进行转义,比如:- 使用CHR函数插入特殊字符```INSERT INTO table_name (column1) VALUES ('This is a' || chr(39) || 'test');```其中,chr(39)代表单引号。

- 使用Q函数对特殊字符进行转义```INSERT INTO table_name (column1) VALUES (q'['This is a''test']');```其中,q'[]'中括号里面的内容会被认为是原始字符串,不会对其中的特殊符号进行转义。

oracle数据库实训八作业代码

oracle数据库实训八作业代码

1查询100号部门的所有员工信息2查询所有职位编号为“sa_man”的员工号,员工名,和部门号。

3查询每个员工的员工号,工资,奖金,以及工资与奖金的和查询40号部门中职位编号为“ad_asst”和20号部门中职位编号为“sa_rep"的员工信息.5查询职位名称不为“stock manager”和“purchasing manager”且工资大于等于2000元的员工详细信息;代码如下:SELECT *FROM EMPLOYEESWHERE JOB_ID NOT IN('PURCHASING MANAGER’,'STOCK MANAGER')AND SALARY>=2000;6查询有奖金的员工不同的职位编号和名称查询没有奖金或奖金低于100元的员工信息。

查询员工名(first_name)中不包含“s”的员工。

查询员工的姓名和入职日期,并按入职日期从先到后进行排序. 查询所有员工的姓名及其直接上级的姓名.查询入职日期早于其直接上级领导的所有员工信息查询各个部门部门号,部门名称,部门所在地及部门的领导姓名. 查询所有部门及其员工信息,包括哪些没有员工的部门查询所有员工及其部门信息,包括哪些还没有员工的部门查询所有员工的员工号,员工名,部门名称,职位名称,工资和奖金查询至少有一个员工的部门信息查询工资比100号员工工资高的所有员工信息查询工资高于公司平均工资的所有员工信息查询各个部门中不同职位的最高工资查询各个部门的人数及平均工资统计各个职位的员工数与平均工资统计每个部门中各职位的人数与平均工资查询最低工资大于5000元的各种工种查询平均工资低于6000元的部门及其员工信息查询在“Sales"部门工作的员工姓名和部门号查询与140号员工从事相同工作的所有员工信息查询员工工资高于30号部门中所有员工的工资的员工姓名和工资以及部门号查询每个部门中部门号,员工数量,平均工资和平均工作年限。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ORACLE经典案例ORACLE--E-001)员工信息综合查询(ORACLE定义ORACLE-F-001——ORACLE-F-005的综合练习:1.用sqlplus连接数据库时,为什么会出Oracle not available错误?2.找出员工的姓中(last_name)第三个字母是a的员工名字3.找出员工名字中含有a和e的4.找出所有有提成的员工,列出名字、工资、提出,显示结果按工资从小到大,提成从小到大5.42部门有哪些职位6.哪些部门不是Sales部7.显示工资不在1000到1550之间的员工信息:名字、工资,按工资从大到小排序。

8.显示职位为Stock Clerk和Sales Representative,年薪在14400和17400之间的员工的信息:名字、职位、年薪。

9.解释select id ,commission_pct from s_emp where commission_pct is null和selectid , commission_pct from s_emp where commission_pct = null的输出结果。

10.select语句的输出结果为select * from s_dept;select * from s_emp;select * from s_region;select * from s_customer;……当前用户有多少张表,结果集有多少条记录。

11.判断select first_name , dept_id from s_emp where salary > '1450'是否抱错,为什么?答案1.oracle server(即通常所说的数据库)是否启动,ORACLE_SID是否正确设置。

2.select last_name from s_emp where last_name like '__a%';3.select first_name from s_emp where first_name like '%a%' andfirst_name like '%e%';比较:select first_name from s_emp where first_name like '%a%e%';4.select first_name , salary , commission_pct from s_emp wherecommission_pct is not null order by salary desc , commission_pct;5.select distinct title from s_emp where dept_id = 426.select id , name ,region_id from s_dept where name <> 'Sales'7.select first_name , salary from s_emp where salary not between 1000and 1550 order by salary desc8.select first_name , title , salary*12 ann_sal from s_emp where titlein ('Stock Clerk', 'Sales Representative' and salary between 1200 and 1450;9.is null判断是否为空,=null判断某个值是否等于null,null = null和null <> null都为false。

10.select 'select * from '||table_name||';' from user_tables;11.隐式数据类型转换。

ORACLE--E-002)人力资源系统数据复杂查询(ORACLE定义ORACLE-F-006——ORACLE-F-008的综合练习:1.改变NLS_LANG的值,让select to_char(salary*12,’L99,999.99’) from s_emp 输出结果的货币单位是¥和$2.列出每个员工的名字,工资、涨薪后工资(涨幅为8%),元为单位进行四舍五入3.找出谁是最高领导,将名字按大写形式显示4.Ben的领导是谁(Ben向谁报告)。

5.Ben领导谁。

(谁向Ben报告)。

6.哪些员工的工资高于他直接上司的工资,列出员工的名字和工资,上司的名字和工资7.哪些员工和Biri(last_name)同部门8.哪些员工跟Smith(last_name)做一样职位9.哪些员工跟Biri(last_name)不在同一个部门10.哪些员工跟Smith(last_name)做不一样的职位11.显示有提成的员工的信息:名字、提成、所在部门名称、所在地区的名称12.显示Operations部门有哪些职位13.整个公司中,最高工资和最低工资相差多少14.提成大于0的人数15.显示整个公司的最高工资、最低工资、工资总和、平均工资,保留到整数位。

16.整个公司有多少个领导17.列出在同一部门入职日期晚但工资高于其他同事的员工:名字、工资、入职日期答案1.setenv NLS_LANG 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK'setenv NLS_LANG 'AMERICAN_7ASCII'2.select first_name , salary , round(salary*1.08) from s_emp;3.select upper(first_name) from s_emp where manager_id is null;4.select e1.first_name from s_emp e1 , s_emp e2 where e2.manager_id =e1.id and e2.first_name = 'Ben';5.select e1.first_name from s_emp e1 , s_emp e2 where e1.manager_id =e2.id and e2.first_name = 'Ben';6.select e.first_name , e.salary , m.first_name , m.salary from s_empe , s_emp m where e.manager_id = m.id and e.salary > m.salary;7.select e1.first_name from s_emp e1 , s_emp e2 where e1.dept_id =e2.dept_id and st_name = 'Biri' and st_name <> 'Biri';8.select e1.first_name from s_emp e1 , s_emp e2 where e1.title = e2.titleand st_name = 'Smith' and st_name <> 'Smith';9.select e1.first_name from s_emp e1 , s_emp e2 where e1.dept_id =e2.dept_id(+) and st_name(+) = 'Biri' and st_name is null;10.select e1.first_name , e2.first_name from s_emp e1 , s_emp e2 wheree1.title(+) = e2.title and st_name(+) = 'Smith' and st_name is null;11.select dname , rname , first_name , commission_pct froms_emp e , s_dept d , s_region r where e.dept_id = d.id and d.region_id = r.id and mission_pct is not null;12.select distinct e.title from s_emp e , s_dept d where e.dept_id = d.idand = 'Operations';13.select max(salary) – min(salary) from s_emp;14.select count(*) from s_emp where commission_pct > 0;15.select max(salary) , min(salary) , sum(salary) , round(avg(salary))from s_emp;16.select count(distinct manager_id) from s_emp;17.select e1.first_name , e1.start_date , e1.salary from s_emp e1 , s_empe2 where e1.dept_id = e2.dept_id and e1.start_date > e2.start_date and e1.salary > e2.salary;ORACLE--E-003)复杂业务数据关联查询(ORACLE定义ORACLE-F-009——ORACLE-F-011的综合练习:1.各个部门平均、最大、最小工资、人数,按照部门号升序排列2.各个部门中工资大于1500的员工人数3.各个部门平均工资和人数,按照部门名字升序排列4.列出每个部门中有同样工资的员工的统计信息,列出他们的部门号,工资,人数5.该部门中工资高于1000的员工数量超过2人,列出符合条件的部门:显示部门名字、地区名称6.哪些员工的工资,高于整个公司的平均工资,列出员工的名字和工资(降序)7.哪些员工的工资,介于32和33部门(33高些)平均工资之间8.所在部门平均工资高于1500的员工名字9.列出各个部门中工资最高的员工的信息:名字、部门号、工资10.最高的部门平均工资值的是多少11.哪些部门的人数比32号部门的人数多12.Ben的领导是谁(非关联子查询)13.Ben领导谁(非关联子查询)14.Ben的领导是谁(关联子查询)15.Ben领导谁(关联子查询)16.列出在同一部门共事,入职日期晚但工资高于其他同事的员工:名字、工资、入职日期(关联子查询)17.哪些员工跟Biri(last_name)不在同一个部门(非关联子查询)18.哪些员工跟Biri(last_name)不在同一个部门(关联子查询)19.Operations部门有哪些职位(非关联子查询)20.Operations部门有哪些职位(关联子查询)答案1.select dept_id , avg(salary) asal , max(salary) asal , min(salary)isal , count(*) cnt from s_emp group by dept_id order by dept_id;2.select dept_id , count(*) cnt from s_emp where salary > 1500 groupby dept_id;3.select max() dname , max() rname , avg(e.salary) avgsalfrom s_emp e , s_dept d , s_region r where e.dept_id = d.id andd.region_id = r.id group by dept_id order by dname , rname;4.select e1.dept_id , e1.salary , count(*) cnt from s_emp e1 , s_empe2 where e1.salary = e2.salary and e1.dept_id = e2.dept_id and e1.id <> e2.id group by e1.dept_id , e1salary5.select max() dname , max() rname , count(*) cnt from s_empe , s_dept d , s_region r where e.dept_id = d.id and d.region_id =r.id and e.salary > 1000 group by dept_id having count(*) > 2;6.select first_name , salary from s_emp where salary > (selectavg(salary) from s_emp) order by salary desc;7.select first_name , salary from s_emp where salary between (selectavg(salary) from s_emp where dept_id = 32) and (select avg(salary) from s_emp where dept_id = 33);8.select first_name , salary from s_emp where dept_id in (select dept_idfrom s_emp group by dpet_id having avg(salary) > 1500);9.select first_name , salary , dept_id from s_emp where (dept_id , salary)in (select dept_id , max(salary) from s_emp group by dept_id);10.select max(avg(salary)) from s_emp;11.select dept_id , count(*) cnt from s_emp group by dept_id havingcount(*) > (select count(*) from s_emp where dept_id = 32);12.select first_name from s_emp where id in (select manager_id from s_empwhere first_name = 'Ben');13.select first_name from s_emp where manager_id = (select id from s_empwhere first_name = 'Ben');14.select first_name from s_emp o where exists (select 1 from s_emp iwhere first_name = 'Ben' and i.manager_id = o.id);15.select first_name from s_emp o where exists (select 1 from s_emp iwhere first_name = 'Ben' and i.id = o.manager_id);16.select first_name from s_emp o where exists (select 1 from s_emp iwhere i.dept_id = o.dept_id and o.start_date > i.start_date and o.salary > i.salary);17.select first_name from s_emp where dept_id not in (select dept_id froms_emp where last_name = 'Biri');18.select last_name from s_emp o where not exists (select 1 from s_empi where i.dept_id = o.dept_id and st_name = 'Biri');19.select distinct title from s_emp where dept_id in (select id froms_dept where name = 'Operations');20.select distinct title from s_emp e where exists (select 1 from s_deptd where e.dept_id = d.id and name = 'Operations';。

相关文档
最新文档