Oracle中使用PLSQL编写输入员工编号查询员工姓名存储过程实例

合集下载

经典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存储过程写法

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:三轮乱弄版

实验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命令

常⽤查询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用法

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存储过程写法及调用

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 存储过程优秀例子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作为参数,然后删除对应的员工记录。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('没有找到该员工记录!'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('程序块错误!'); RAISE; end pro01;
存储过程实例
存储过程编写完成后需要编译
程序 树状 列表 窗口
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
相关文档
最新文档