Oracle中使用PLSQL编写输入员工编号查询员工姓名存储过程实例
经典plsql例子
setserveroutput on;--计算两个整数的和与这两个整数的差的商declareaint:=100;bint:=200;c number;beginc:=(a+b)/(a-a);dbms_output.put_line(c);exceptionwhenzero_divide thendbms_output.put_line('除数不能为零!');end;/declareNum_sal number; --声明一个数值变量Var_ename varchar2(20); --声明一个字符串变量beginselect ename,sal into Var_ename,Num_sal from scott.emp where empno=7369; --检索指定的值并保存在变量中dbms_output.put_line(Var_ename||'的工资是'||Num_sal); --输出变量的值end;/--简单的插入一条语句create or replace procedure pro1 isbegininsert into scott.emp(empno,ename)values(1111,'1111');end;/exec pro1;select * from scott.emp;--删除一条语句(传参)create procedure pro2(in_empno number) isbegindelete from emp where empno=in_empno;end;/--简单的插入一条语句(传参)create or replace procedure pro3(in_empnonumber,in_ename varchar2) isbegininsert into scott.emp(empno,ename)values(in_empno,in_ename);end;/declare--定义变量的格式是变量名称变量的类型v_enamevarchar2(8);beginselect ename into v_ename from emp where empno=&empno; --将查询到的值存入v_ename变量中--输出v_enamedbms_output.put_line('雇员名是'||v_ename);end;/--将上面的块改成过程create procedure pro4(v_in_empno number) isv_enamevarchar2(8);beginselectename into v_ename from emp where empno=v_in_empno;dbms_output.put_line('雇员名是'||v_ename);end;/--编写一个过程,实现输入雇员名,新工资可以修改雇员的工资create procedure pro5(in_ename in varchar2,in_newsal in number) isbeginupdateemp set sal=in_newsal where ename = in_ename;end;/--编写一个过程,可以接受id和薪水,更新薪水,如果id不存在,需要在exception中捕获,并给出提示!create or replace procedure pro6(in_empnonumber,in_sal number) isv_enamevarchar2(32);v_empno number;beginselect empno into v_empno from emp where empno = in_empno; --此条语句为了实现在exception中可以抛出no_data_foundupdateemp set sal = in_sal where empno = in_empno;exceptionwhenno_data_found thendbms_output.put_line('您输入的编号有误!');end;/--编写一个函数,可以根据接受用户名并返回用户的年薪create or replace function fun1(in_ename varchar2)return number is--定义一个变量来接受年薪v_annual_sal number;beginselect (sal+nvl(comm,0))*13 into v_annual_sal from emp where ename=in_ename; returnv_annual_sal;end;select fun1('SMITH') from dual;--定义一个包,该包有一个过程,该过程可以接收用户名和新的薪水(将用于通过用户名去更新薪水),--还有一个函数,该函数可以接受一个用户名(将用于实现得到该用户的年薪是多少)create or replace package mypackage1 is--声明一个过程procedure pro1(in_ename varchar2,in_newsal number);--声明一个函数function fun1(in_ename varchar2) return number;end;/--编写一个包体的案例create or replace package body mypackage1 is--实现过程procedure pro1(in_ename varchar2,in_newsal number) isbeginupdateemp set sal=in_newsal where ename = in_ename;end;--实现函数function fun1(in_ename varchar2) return number isv_annual_sal number;begin select(sal+nvl(comm,0))*13 into v_annual_sal from emp where ename=in_ename;returnv_annual_sal;end;end;/--输入员工的工号,显示雇员姓名、工资、个人所得税(税率为0.03)create or replace procedure pro7(in_empno in number) isv_tax_rate number(3,2):=0.03;v_ename varchar(32);v_sal number;v_pay number;beginselectename,sal into v_ename,v_sal from emp where empno=in_empno;v_pay:=v_tax_rate*v_sal;dbms_output.put_line(v_ename||'工资是='||v_sal||'个人所得税是:='||v_pay); end;/--使用%type定义数据create or replace procedure pro7(in_empno in number) isv_tax_rate number(3,2):=0.03;v_enameemp.ename%type;v_salemp.sal%type;v_pay number;beginselectename,sal into v_ename,v_sal from emp where empno=in_empno;v_pay:=v_tax_rate*v_sal;dbms_output.put_line(v_ename||'工资是='||v_sal||'个人所得税是:='||v_pay); end;/--使用pl/sql复合类型(record),编写一个过程可以接受一个用户编号,并显示该用户的名字,薪水,工作岗位。
plsql存储过程写法
plsql存储过程写法存储过程是在数据库中创建的一种可重用的程序,它由一系列SQL语句和控制结构组成。
存储过程可以简化复杂的数据库操作,提高数据库的性能,并使数据库操作更加安全和可靠。
在Oracle数据库中,PL/SQL(Procedural Structured Query Language)是用于创建和管理存储过程的编程语言。
本文将介绍如何编写PL/SQL存储过程。
一、存储过程的创建要创建存储过程,首先需要打开Oracle数据库的PL/SQL开发环境,例如SQL Developer。
然后,可以使用以下语法创建一个简单的存储过程:```plsqlCREATE PROCEDURE procedure_name ISBEGIN-- SQL语句和过程逻辑END;```其中,`procedure_name`是你要创建的存储过程的名称。
在`BEGIN`和`END`之间的部分是存储过程的主体,其中可以包含SQL语句和控制结构。
二、参数和输入输出参数存储过程可以接受参数,以提高重用的灵活性和便利性。
可以使用`IN`和`OUT`关键字来定义输入和输出参数。
以下是一个带有输入和输出参数的存储过程的示例:```plsqlCREATE PROCEDURE procedure_name(IN parameter_name datatype, OUT parameter_name datatype) ISBEGIN-- 使用参数进行操作END;```在上述示例中,`parameter_name`是参数的名称,`datatype`是参数的数据类型。
在存储过程的主体中,可以访问和使用这些参数,而不需要从过程外部显式地传递它们。
输出参数可以用来将结果返回给调用者。
三、调用存储过程创建存储过程后,可以通过调用它来执行其中的SQL语句和控制结构。
可以使用以下语法调用存储过程:```sqlCALL procedure_name(parameter_value);```其中,`parameter_value`是传递给存储过程的参数值。
存储过程案例
存储过程案例
存储过程(Stored Procedure)是一种在数据库中存储复杂程序,用户通过调用存储过程来执行这个程序。
以下是一个简单的存储过程案例:
案例:创建存储过程,根据用户输入的姓名查询员工信息
1. 数据库表结构
假设有一个名为`employees`的表,结构如下:
```sql
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
department VARCHAR(50)
);
```
2. 创建存储过程
```sql
DELIMITER //
CREATE PROCEDURE GetEmployeeInfo(IN empName VARCHAR(50)) BEGIN
SELECT FROM employees WHERE name = empName;
END //
DELIMITER ;
```
3. 调用存储过程
调用上述存储过程,查询名为"John"的员工信息:
```sql
CALL GetEmployeeInfo('John');
```
4. 结果
如果存在名为"John"的员工,则返回该员工的信息;否则返回空结果。
这是一个简单的存储过程示例。
在实际应用中,存储过程可以更复杂,可以包含条件、循环、多个表的联接等操作。
使用存储过程的好处是提高性能、减少网络流量、提高安全性等。
实验3:三轮乱弄版
Oracle数据库管理与开发I实验报告系所:专业:学生姓名:学生学号:提交日期:大连东软信息学院Dalian Neusoft University of Information[实验名称]:利用PLSQL进行系统功能模块的开发[实验日期]:[实验目的]:掌握PL/SQL程序设计[实验要求]:按要求利用PL/SQL进行功能模块开发[实验步骤描述]:1.编写一个PL/SQL块,输出所有员工的员工姓名、员工号、工资和部门号。
declarecursor c_emp isselect * from employees;beginfor v_emp in c_emp loopdbms_output.put_line(v_emp.first_name||'' ||v_emp.employee_id||' '||v_emp.department_id||' '||v_emp.salary);endloop; end;2.编写一个PL/SQL块,输出所有比本部门平均工资高的员工信息。
declarev_avg employees.salary%type;beginfor v_emp in (select * from employees) loopselectavg(salary) into v_avg from employees where department_id = v_emp.department_id;if v_emp.salary >= v_avg thendbms_output.put_line(v_emp.employee_id||''||v_emp.first_name||''|| v_emp.salary ||''|| v_emp.department_id); endif;endloop;end;3.写一个PL/SQL块,输出所有员工及其部门领导的姓名、员工号及部门号。
常用查询Oracle的表,视图,存储过程,用户等SQL命令
常⽤查询Oracle的表,视图,存储过程,⽤户等SQL命令有时候需要导出某⽤户下的所有table、view、sequence、trigger等信息,下⾯的SQL可以将这些信息select出来:select * from user_tables;select * from user_views;select * from user_sequences;select * from user_triggers;查看当前⽤户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前⽤户的⾓⾊ SQL>select * from user_role_privs; 查看当前⽤户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 查看⽤户下所有的表 SQL>select * from user_tables;1、⽤户 查看当前⽤户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前⽤户的⾓⾊ SQL>select * from user_role_privs; 查看当前⽤户的系统权限和表级权限 SQL>select * from user_sys_privs; SQL>select * from user_tab_privs; 显⽰当前会话所具有的权限 SQL>select * from session_privs; 显⽰指定⽤户所具有的系统权限 SQL>select * from dba_sys_privs where grantee=’GAME’;2、表 查看⽤户下所有的表 SQL>select * from user_tables; 查看名称包含log字符的表 SQL>select object_name,object_id from user_objects where instr(object_name,’LOG’)>0; 查看某表的创建时间 SQL>select object_name,created from user_objects where object_name=upper(‘&table_name’); 查看某表的⼤⼩ SQL>select sum(bytes)/(1024*1024) as “size(M)” from user_segments where segment_name=upper(‘&table_name’); 查看放在ORACLE的内存区⾥的表 SQL>select table_name,cache from user_tables where instr(cache,’Y')>0;3、索引 查看索引个数和类别 SQL>select index_name,index_type,table_name from user_indexes order by table_name; 查看索引被索引的字段 SQL>select * from user_ind_columns where index_name=upper(‘&index_name’); 查看索引的⼤⼩ SQL>select sum(bytes)/(1024*1024) as “size(M)” from user_segments where segment_name=upper(‘&index_name’);4、序列号 查看序列号,last_number是当前值 SQL>select * from user_sequences;5、视图 查看视图的名称 SQL>select view_name from user_views; 查看创建视图的select语句 SQL>set view_name,text_length from user_views; SQL>set long 2000; 说明:可以根据视图的text_length值设定set long 的⼤⼩ SQL>select text from user_views where view_name=upper(‘&view_name’);6、同义词 查看同义词的名称 SQL>select * from user_synonyms;7、约束条件 查看某表的约束条件 SQL>select constraint_name, constraint_type,search_condition, r_constraint_name from user_constraints where table_name = upper(‘&table_name’); SQL>select c.constraint_name,c.constraint_type,cc.column_name from user_constraints c,user_cons_columns cc where c.owner = upper(‘&table_owner’) and c.table_name = upper(‘&table_name’) and c.owner = cc.owner and c.constraint_name = cc.constraint_name order by cc.position;8、存储函数和过程 查看函数和过程的状态 SQL>select object_name,status from user_objects where object_type=’FUNCTION’; SQL>select object_name,status from user_objects where object_type=’PROCEDURE’; 查看函数和过程的源代码 SQL>select text from all_source where owner=user and name=upper(‘&plsql_name’);。
plsql procedure用法
PL/SQL Procedure用法PL/SQL(Procedural Language/Structured Query Language)是一种编程语言,用于编写存储过程、触发器、函数和包等数据库对象。
PL/SQL Procedure是其中的一种类型,它是一段预定义的可重复使用的代码块,可以接收输入参数并返回结果。
在本文中,我们将深入探讨PL/SQL Procedure的用法,包括创建、调用、参数传递和异常处理等方面。
创建PL/SQL Procedure在Oracle数据库中,可以使用CREATE PROCEDURE语句创建PL/SQL Procedure。
下面是一个创建简单PL/SQL Procedure的示例:CREATE OR REPLACE PROCEDURE calculate_salary (emp_id IN NUMBER)ASsalary NUMBER;BEGIN-- 根据员工ID查询薪水SELECT salary INTO salary FROM employees WHERE employee_id = emp_id;-- 输出薪水信息DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_id);DBMS_OUTPUT.PUT_LINE('Salary: ' || salary);END;/上述代码创建了一个名为calculate_salary的PL/SQL Procedure,它接收一个输入参数emp_id,并根据该参数查询员工的薪水信息并输出。
在创建过程时,可以使用CREATE OR REPLACE关键字,以便在已存在同名过程时进行替换。
调用PL/SQL Procedure调用PL/SQL Procedure可以使用EXECUTE或EXEC关键字,后跟过程名和参数。
以下是调用上述示例过程的示例:EXECUTE calculate_salary(1001);在调用过程时,需要传递与过程定义中参数类型和顺序匹配的参数值。
oracle存储过程写法及调用
Oracle存储过程的写法及调用如下:存储过程定义语法:```sqlCREATE [ORREPLACE] PROCEDURE procedure_name(arg1 [mode1] datatype1, arg2 [mode2] datatype2)IS [AS]PL/SQLBlock;```其中,`procedure_name` 是存储过程的名称;`arg1` 和`arg2` 是存储过程的参数,包括参数名、模式(IN、OUT、IN OUT)和数据类型;`PL/SQLBlock` 是存储过程的主体部分,包括一系列的SQL语句。
如果存储过程没有参数,只需要定义存储过程的主体部分即可。
例如:```sqlCREATE PROCEDURE out_time ISBEGINDBMS_OUTPUT.PUT_LINE('procedure_1......');END;```如果存储过程有参数,需要在定义时指定参数名、模式和数据类型。
例如:```sqlCREATE PROCEDURE procedure_2(v_i IN NUMBER, v_j OUT NUMBER) ISBEGINv_j := v_i * 2;DBMS_OUTPUT.PUT_LINE('procedure_2......' || v_i || '......' || v_j);END;```在这个例子中,`procedure_2` 接受两个参数`v_i` 和`v_j`,其中`v_i` 是输入参数,`v_j` 是输出参数。
在存储过程内部,对`v_i` 进行运算,并将结果赋值给`v_j`,然后输出运算结果。
调用存储过程的方法如下:```sqlBEGINprocedure_name(arg1 => value1, arg2 => value2);END;```其中,`procedure_name` 是存储过程的名称;`arg1` 和`arg2` 是存储过程的参数,需要指定相应的值。
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作为参数,然后删除对应的员工记录。
oracle sql查询存储过程内容
oracle sql查询存储过程内容Oracle SQL查询存储过程内容在Oracle数据库中,存储过程是一种预编译的数据库对象,用于封装一系列的SQL语句和业务逻辑。
当我们需要查询存储过程的内容时,可以通过以下方式实现:1. 使用Oracle SQL开发工具Oracle SQL开发工具如SQL Developer、Toad等,提供了直接查询数据库对象的功能。
通过连接到相应的数据库,我们可以执行以下步骤:•打开SQL开发工具并连接到数据库。
•在数据库导航栏中选择存储过程所在的模式(Schema)。
•展开“存储过程”(或类似的选项)文件夹,找到目标存储过程。
•右键单击存储过程,并选择“查看”选项。
•在弹出的窗口中,可以查看到存储过程的代码或源码。
2. 使用SQL查询系统表Oracle数据库提供了一些系统表,存储了数据库对象的元数据信息。
我们可以通过查询这些系统表来获取存储过程的内容。
以下是一些常用的系统表和他们的用途:•ALL_OBJECTS:包含了数据库中所有的对象信息,包括存储过程。
•ALL_SOURCE:存储了数据库中所有对象的源码信息,包括存储过程的代码。
•ALL_PROCEDURES:记录了所有存储过程的详细信息,包括存储过程名称、所属模式等。
通过执行类似以下的SQL查询语句,我们可以获取存储过程的内容:SELECT textFROM all_sourceWHERE object_type = 'PROCEDURE'AND owner = 'SCHEMA_NAME'AND name = 'PROCEDURE_NAME';请注意将上述查询语句中的’SCHEMA_NAME’和’PROCEDURE_NAME’替换为实际的模式名称和存储过程名称。
3. 使用DBMS_METADATA包Oracle数据库提供了一个名为DBMS_METADATA的强大的包,它可以用于获取数据库对象的元数据信息。
sql查询完成从员工表中查询所有员工信息的操作流程
sql查询完成从员工表中查询所有员工信息的操作流程要完成从员工表中查询所有员工信息的操作,你需要遵循以下步骤:
1. 打开数据库管理系统:首先,你需要打开数据库管理系统,比如 MySQL 或 PostgreSQL,以便连接到数据库。
2. 创建数据库连接:使用适当的数据库连接方法(例如,使用 JDBC 或ODBC 驱动程序),连接到你的数据库。
你需要提供数据库的连接信息,例如主机名、端口号、用户名和密码。
3. 编写 SQL 查询语句:在 SQL 查询语句中,使用 SELECT 语句来选择员工表中的所有列。
例如,你可以使用以下查询语句:
```sql
SELECT FROM employees;
```
该语句将选择员工表中的所有列,并返回所有员工的完整信息。
4. 执行 SQL 查询:将编写好的 SQL 查询语句发送到数据库服务器进行执行。
你可以使用适当的数据库查询方法(例如,使用 JDBC 的 executeQuery
方法)来执行查询。
5. 处理查询结果:一旦查询执行完成,你需要处理查询结果。
你可以从查询结果中获取所有员工的详细信息,并将其存储在适当的数据结构中,例如List 或 Map。
6. 关闭数据库连接:在完成查询操作后,记得关闭数据库连接,以释放资源并确保数据的一致性。
你可以使用适当的关闭方法(例如,使用 JDBC 的close 方法)来关闭数据库连接。
这些是完成从员工表中查询所有员工信息的操作的一般步骤。
具体的实现方式可能会因你使用的编程语言和数据库管理系统的不同而有所差异。
PLSQL基础教程三查询(SELECT)
PLSQL基础教程三查询(SELECT)PL/SQL是一种用于数据库操作的编程语言,在PL/SQL中,查询(SELECT)是非常重要的部分之一、查询语句可以从数据库中检索数据,并根据条件进行过滤和排序。
在本教程中,我们将讨论PL/SQL中的SELECT语句以及与之相关的其他关键概念。
SELECT语句是PL/SQL中用于从一个或多个表中选择数据的核心语句。
它的基本语法如下:```SELECT列名FROM表名;```其中,列名是要选择的列的名称,可以是单个列,也可以是多个列,列之间用逗号分隔。
表名是要从中选择数据的表的名称。
例如,如果我们有一个名为 "employees" 的表,包含员工的姓名、年龄和工资信息,我们可以使用以下 SELECT 语句选择所有的员工信息:```FROM employees;```在这个例子中,"employees" 是表名,"*" 是通配符,表示选择所有的列。
在SELECT查询中,我们还可以使用WHERE子句来添加条件。
WHERE子句用于筛选出满足指定条件的记录。
例如,我们可以使用以下查询找出工资大于5000的员工:```FROM employeesWHERE salary > 5000;```在这个例子中,我们使用了">"这个操作符来比较工资和5000的大小。
只有工资大于5000的员工信息将被返回。
此外,我们还可以在SELECT语句中使用ORDERBY子句来对查询结果进行排序。
ORDERBY子句可以按照指定的列对结果进行升序或降序排序。
例如,我们可以使用以下查询按照工资降序排列员工信息:```FROM employeesORDER BY salary DESC;```在这个例子中,我们使用了"DESC"关键字来指定降序排序。
在SELECT查询中,我们还可以使用聚合函数来对数据进行计算。
PLSQL教程学习教程
第7页/共36页
PL/SQL中的标识符
下面是建议使用的变量命名方法
标识符 程序变量 程序常量 游标变量 异常标识
表类型 表
记录类型 参数
trim
N/A
从集合的最后删除一个元素
可变数组
Delete(n)
N/A
删除元素下标为n的元素
表
第22页/共36页
表和数组属性
例: DECLARE type strings_table is table of varchar2(10) index by binary_integer; strings strings_table; int number;
-- Declare a varray with four element
v_list strings := strings('scott','peter','smith','tom');
int number;
BEGIN
int := 1;
dbms_output.put_line(v_list(int));
PL/SQL中的变量类型
类型 CHAR(n) VARCHAR2(n) BINARY_INTEGER NUMBER(p,s)
LONG DATE BOOLEAN ROWID
说明 定长字符串,长度可选,缺省1。最大可达2000字节 可变字符串,长度不能缺省,最大可达4000字节 带符号整数,为整数计算优化性能 数值,p代表刻度,s代表精度 变长字符串 日期 布尔 存放数据库行号
跟我学Oracle从入门到精通培训教程——PLSQL中的存储过程及应用
3、编译该存储过程
4、采用默认参数值方式执行带默认输入参数的存储过程例 (1)新建一个命令窗口并采用默认参数值方式执行该存储 过程
(2)在命令窗口中通过查询目标数据库表中的数据验证 该存储过程的执行结果
3、以指定的参数值方式执行带默认输入参数的存储过程 示例 (1)在调用存储过程时间给定具体的参数值
(2)在控制台中的 输出结果
( 3 )通过查询目标数据库表以验证该存储过程的执行结 果
五、在OEM中创建存储过程
1、登录OEM(http://teacher:1158/em/)
2 、选中在“管理”标签页中的“程序”栏中的“过程” 链接
3、点击“创建”链接,并输入存储过程的名称和存储过程 的代码
2创建数据库表someonetable3在plsqldeveloper中创建存储过程proceduredemo4本示例的存储过程的代码示例5编译该存储过程6在plsqldeveloper工具中执行存储过程块7在sql窗口中验证存储过程的执行结果二创建带输入参数的存储过程1创建带输入参数的存储过程2编程该存储过程体代码3编译该存储过程4采用默认参数值方式执行带默认输入参数的存储过程例1新建一个命令窗口并采用默认参数值方式执行该存储过程2在命令窗口中通过查询目标数据库表中的数据验证该存储过程的执行结果3以指定的参数值方式执行带默认输入参数的存储过程示例1在调用存储过程时间给定具体的参数值2在命令窗口中通过查询目标数据库表中的数据验证该存储过程的执行结果selectfromsomeonetable
(2)在命令窗口中通 过查询目标数据库表中 的数据验证该存储过程 的执行结果 select * from someOneTable;
4、在PL/SQL代码块中调用带默认输入参数的存储过程示例 (1)在SQL窗口中输入下面的PL/SQL代码块以调用该存储 过程
ORACLE_PLSQL存储过程教程
(1)SEQNAME.NEXTV AL里面的值如何读出来?可以直接在insert into test values(SEQNAME.NEXTV AL) 是可以用这样:SELECT tmp#_seq.NEXTV ALINTO id_tempFROM DUAL; 然后可以用id_temp(2)PLS-00103: 出现符号">"在需要下列之一时:代码如下:IF (sum>0)THENbeginINSERT INTO emesp.tp_sn_production_logV ALUES (r_serial_number, , id_temp);EXIT;end;一直报sum>0 这是个很郁闷的问题因为变量用了sum 所以不行,后改为i_sum>0(3)oracle 语法1. Oracle应用编辑方法概览答:1) Pro*C/C++/... : C语言和数据库打交道的方法,比OCI更常用;2) ODBC3) OCI: C语言和数据库打交道的方法,和ProC很相似,更底层,很少用;4) SQLJ: 很新的一种用Java访问Oracle数据库的方法,会的人不多;5) JDBC6) PL/SQL: 存储在数据内运行, 其他方法为在数据库外对数据库访问;2. PL/SQL答:1) PL/SQL(Procedual language/SQL)是在标准SQL的基础上增加了过程化处理的语言;2) Oracle客户端工具访问Oracle服务器的操作语言;3) Oracle对SQL的扩充;4. PL/SQL的优缺点答:优点:1) 结构化模块化编程,不是面向对象;2) 良好的可移植性(不管Oracle运行在何种操作系统);3) 良好的可维护性(编译通过后存储在数据库里);4) 提升系统性能;第二章PL/SQL程序结构1. PL/SQL块答:1) 申明部分, DECLARE(不可少);2) 执行部分, BEGIN...END;3) 异常处理,EXCEPTION(可以没有);2. PL/SQL开发环境答:可以运用任何纯文本的编辑器编辑,例如:VI ;toad很好用3. PL/SQL字符集答:PL/SQL对大小写不敏感4. 标识符命名规则答:1) 字母开头;2) 后跟任意的非空格字符、数字、货币符号、下划线、或# ;3) 最大长度为30个字符(八个字符左右最合适);5. 变量声明答:语法V ar_name type [CONSTANT][NOT NULL][:=value];注:1) 申明时可以有默认值也可以没有;2) 如有[CONSTANT][NOT NULL], 变量一定要有一个初始值;3) 赋值语句为“:=”;4) 变量可以认为是数据库里一个字段;5) 规定没有初始化的变量为NULL;第三章1. 数据类型答:1) 标量型:数字型、字符型、布尔型、日期型;2) 组合型:RECORD(常用)、TABLE(常用)、V ARRAY(较少用)3) 参考型:REF CURSOR(游标)、REF object_type4) LOB(Large Object)2. %TYPE答:变量具有与数据库的表中某一字段相同的类型例:v_FirstName studengts.first_name%TYPE;3. RECORD类型答:TYPE record_name IS RECORD( /*其中TYPE,IS,RECORD为关键字,record_name 为变量名称*/field1 type [NOT NULL][:=expr1], /*每个等价的成员间用逗号分隔*/field2 type [NOT NULL][:=expr2], /*如果一个字段限定NOT NULL,那么它必须拥有一个初始值*/... /*所有没有初始化的字段都会初始为NULLfieldn type [NOT NULL][:=exprn]);4. %ROWTYPE答:返回一个基于数据库定义的类型DECLAREv_StuRec Student%ROWTYPE; /*Student为表的名字*/注:与3中定一个record相比,一步就完成,而3中定义分二步:a. 所有的成员变量都要申明; b. 实例化变量;5. TABLE类型答:TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER;例:DECLARETYPE t_StuTable IS TABLE OF Student%ROWTYPE INDEX BY BINARY_INTERGER;v_Student t_StuTable;BEGINSELECT * INTO v_Student(100) FROM Student WHERE id = 1001;END;注:1) 行的数目的限制由BINARY_INTEGER的范围决定;6. 变量的作用域和可见性答:1) 执行块里可以嵌入执行块;2) 里层执行块的变量对外层不可见;3) 里层执行块对外层执行块变量的修改会影响外层块变量的值;第四章1. 条件语句答:IF boolean_expression1 THEN...ELSIF boolean_expression2 THEN /*注意是ELSIF,而不是ELSEIF*/... /*ELSE语句不是必须的,但END IF;是必须的*/ELSE...END IF;2. 循环语句答:1) Loop...IF boolean_expr THEN /* */EXIT; /* EXIT WHEN boolean_expr */END IF; /* */END LOOP;2) WHILE boolean_expr LOOP...END LOOP;3) FOR loop_counter IN [REVERSE] low_blound..high_bound LOOP...END LOOP;注:a. 加上REVERSE 表示递减,从结束边界到起始边界,递减步长为一;b. low_blound 起始边界; high_bound 结束边界;3. GOTO语句答:GOTO label_name;1) 只能由内部块跳往外部块;2) 设置标签:<<label_name>>3) 示例:LOOP...IF D%ROWCOUNT = 50 THENGOTO l_close;END IF;...END LOOP;<<l_close>>;...4. NULL语句答:在语句块中加空语句,用于补充语句的完整性。
SQL数据库实验三_简单查询(1)解答
其他:
selectemployeeName,department,
case
whensex='M'then'男'
whensex='F'then'女
whereemployeeNamelike'张%'
10.查询姓张且全名为三个汉字的职工姓名。
SQL语句:
SELECTemployeeName
9.查询所有姓张的职工姓名、所属部门和性别,且性别显示为“男”或“女”。
SQL语句:
SELECTemployeeName,department,sex=
casesex
WHEN'M'THEN'男'
WHEN'F'THEN'女'
ELSE'不详'
END
FROMEmployee
WHEREemployeeNameLIKE'张%'
whensalary<2000then'低收入者'
whensalary>=2000andsalary<4000then'中等收入者'
whensalary>=4000then'高收入者'
end
fromEmployee
WHEREyear(birthday)=1973ANDheadShip='职员'
查询结果:
其他:
SELECT*
FROMEmployee
WHEREyear(birthday)='1973'ANDheadShip='职员'
plsql练习题及答案
plsql练习题及答案标题:PL/SQL练习题及答案PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库中的一种编程语言,用于编写存储过程、触发器和函数等数据库对象。
在学习和掌握PL/SQL的过程中,进行一些练习题是非常有帮助的。
本文将为大家提供一些PL/SQL练习题及其答案,帮助读者加深对PL/SQL的理解和应用。
1. 编写一个PL/SQL程序,创建一个名为"employees"的表,包含以下字段:员工编号(emp_id),员工姓名(emp_name),员工职位(emp_position),员工工资(emp_salary)。
然后插入几条员工记录,并查询该表的所有数据。
答案:```sql-- 创建employees表CREATE TABLE employees (emp_id NUMBER,emp_name VARCHAR2(50),emp_position VARCHAR2(50),emp_salary NUMBER);-- 插入员工记录INSERT INTO employees VALUES (1, 'John', 'Manager', 5000);INSERT INTO employees VALUES (2, 'Jane', 'Developer', 4000);INSERT INTO employees VALUES (3, 'Mike', 'Analyst', 3500);-- 查询表的所有数据SELECT * FROM employees;```2. 编写一个PL/SQL程序,创建一个名为"get_employee_salary"的存储过程,该存储过程接收一个员工编号作为输入参数,并返回该员工的工资。
Oracle存储过程的增、删、改、查的简单举例(精)
Oracle存储过程的增、删、改、查: Packages: create or replace packageemp_pags is type emp_cour is ref cursor;--定义游标类型的变量emp_cour-- --添加员工-- function saveEmp(e_ename emp.ename%TYPE, e_job emp.job%TYPE, e_sal emp.sal%TYPE, e_deptno emp.deptno%TYPE return integer;--定义返回类型-- --修改员工信息-- function updateEmp(e_empno emp.empno%TYPE, e_enameemp.ename%TYPE, e_job emp.job%TYPE, e_sal emp.sal%TYPE, e_deptnoemp.deptno%TYPE return integer;--定义返回类型-- --删除员工-- function deleteEmp(e_empno emp.empno%TYPE return integer ; --查询全部-- procedure queryAll(emps out emp_cour;--定义一个输出类型的参数emps-- --查询单条-- procedure queryById(e_empno in number,emps out emp_cour;--定义-- --两表查询-- procedure queryJoin(empJoin out emp_cour; end emp_pags; Package bodies: create or replace package body emp_pags is --添加员工-- function saveEmp(e_enameemp.ename%TYPE, e_job emp.job%TYPE, e_sal emp.sal%TYPE, e_deptnoemp.deptno%TYPE return integer is begin insert into emp (empno,ename,job,sal,deptno values (emp_sequence.nextval,e_ename,e_job,e_sal,e_deptno; commit; return 1; exception when others then return 0; end saveEmp; --修改员工信息-- function updateEmp(e_empno emp.empno%TYPE, e_ename emp.ename%TYPE, e_jobemp.job%TYPE, e_sal emp.sal%TYPE, e_deptno emp.deptno%TYPE return integer is begin update emp set ename = e_ename, job = e_job, sal = e_sal, deptno = e_deptno where empno = e_empno; commit; return 1; exception when others then return 0; end updateEmp; --删除员工-- function deleteEmp(e_empno emp.empno%TYPE return integer is begin delete from emp where empno = e_empno; commit; return 1;exception when others then return 0; end deleteEmp; --查询全部-- procedure queryAll(emps out emp_cour is begin open emps for --打开游标-- selectempno,ename,job,sal,deptno from emp; end queryAll; --查询单条-- 定义两个参数,第一个输入,第二个输出 procedure queryById(e_empno in number,emps out emp_cour is begin open emps for--打开游标-- select empno,ename,job,sal,deptno from emp where empno = e_empno; end queryById; --量表查询-- procedure queryJoin(empJoin outemp_couris begin open empJoin for select e.empno,e.ename,e.job,e.sal,d.dname,d.loc from emp e,dept d where e.deptno=d.deptno; end queryJoin; end emp_pags;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
存储过程实例
存储过程编写完成后需要编译
程序 树状 列表 窗口
enVar := 0; DBMS_OUTPUT.PUT_LINE('开始查询数据库:'); SELECT EName INTO enVar FROM Scott.Emp WHERE EmpNo=pEmpNo; DBMS_OUTPUT.PUT_LINE('员工名称为:'||enVar); EXCEPTION
代码编辑窗口
存储过程实例-测试1
员工号: 7782
存储过程实例-测试2
员工号: 7789
Oracle中使用PL/SQL编写输入员工编号 查询员工姓名存储过程实例
存储过程实例
编写输入员工编号查询员工姓名存储过程: 要求: 1.在scott用户的emp表中依据输入的员工编号,输出员工姓名 2.如果没有找到,显示'没有找lace procedure pro01(pEmpNo IN NUMBER) is enVar VARCHAR2(100); begin