plsql中存储过程的调试方法

合集下载

plsql存储过程循环写法

plsql存储过程循环写法

plsql存储过程循环写法
在PL/SQL中,可以使用循环语句来编写存储过程。

以下是两种常见的循环写法。

1. 使用FOR循环:
```
CREATE OR REPLACE PROCEDURE my_procedure IS BEGIN
FOR i IN 1..10 LOOP
-- 执行循环体中的操作
...
END LOOP;
END;
/
```
在上述示例中,FOR循环从1到10进行迭代,循环变量i在每次迭代中自动递增1。

2. 使用WHILE循环:
```
CREATE OR REPLACE PROCEDURE my_procedure IS
i NUMBER := 1; -- 初始化循环变量
BEGIN
WHILE i <= 10 LOOP
-- 执行循环体中的操作
...
i := i + 1; -- 更新循环变量
END LOOP;
END;
/
```
在上述示例中,WHILE循环在i小于等于10的条件下进行迭代,循环变量i在每次迭代中手动自增1。

无论是使用FOR循环还是WHILE循环,循环体中的操作可以根据具体需求进行编写,可以执行数据库操作、控制流程、调用其他存储过程等。

Plsql的详细设置

Plsql的详细设置

PL/SQL详细设置1、PL/SQL Developer记住登陆密码在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码;设置方法:PL/SQL Developer 7.1.2 ->tools->Preferences->Oracle->Logon History ,“Store history”是默认勾选的,勾上“Store with password” 即可,重新登录在输入一次密码则记住了。

2、执行单条SQL语句在使用PL/SQL Developer的SQL Window时,按F8键,PL/SQL Developer默认是执行该窗口的所有SQL语句,需要设置为鼠标所在的那条SQL语句,即执行当前SQL语句;设置方法:PL/SQL Developer 7.1.2 -->tools->Preferences-->Window types ,勾上“AutoS elect Statement” 即可。

3、格式化SQL语句在使用PL/SQL Developer的SQL Window时,有时候输入的SQL语句太长或太乱,希望能用比较通用的写法格式话一下,这样看起来会好看些,也好分析;使用方法:选中需要格式化的SQL语句,然后点击工具栏的PL/SQL beautifier按钮即可.4、查看执行计划在使用PL/SQL Developer的SQL Window时,有时候输入的SQL语句执行的效率,分析下表结构,如何可以提高查询的效率,可以通过查看Oracle提供的执行计划;使用方法:选中需要分析的SQL语句,然后点击工具栏的Explain plan按钮(即执行计划),或者直接按F5即可。

5、调试存储过程在使用PL/SQL Developer操作Oracle时,有时候调用某些存储过程,或者调试存储过程;调用存储过程的方法:首先,在PL/SQL Developer左边的Browser中选择Procedures,查找需要调用的存储过程;然后,选中调试的存储过程,点击右键,选择Test,在弹出来的Test scrīpt 窗口中,对于定义为in类型的参数,需要给该参数的Value输入值;最后点击上面的条数按钮:Start debugger 或者按F9;最后点击:RUN 或者Ctrl+R6.左下角显示window list点击菜单tools -> window list, 将弹出的小窗口拖到左下角合适位置,然后点击菜单window->save layout7.防止登录超时tools->Preferences-->Oracle->Connection 选择 "check connection"8.不备份sql文件tools->Preferences->Files->backup,页面中backup files中选择 disabled======引用如下======连接oracle10g免安装客户端解决办法首先,在安装ORACLE服务器的机器上搜索下列文件,oci.dllocijdbc10.dllociw32.dllorannzsbb10.dlloraocci10.dlloraociei10.dllsqlnet.oratnsnames.oraclasses12.jarojdbc14.jar制作成压缩文件,配置目标计算机使用。

PLSQLDeveloper使用技巧

PLSQLDeveloper使用技巧

2、执行单条SQL语句
在使用PL/SQL Developer的SQL Window时,按F8键,PL/SQL Developer默认是执行该窗口的所有SQL语句,需要设置为鼠标所在的那条SQL语句,即执行当前SQL语句;
设置方法:PL/SQL Developer 7.1.2 -->tools->Preferences-->Window types ,勾上“AutoSelect Statement” 即可。
4、查看执行计划
在使用PL/SQL Developer的SQL Window时,有时候输入的SQL语句执行的效率,分析下表结构,如何可以提高查询的效率,可以通过查看Oracle提供的执行计划;
使用方法:选中需要分析的SQL语句,然后点击工具栏的Explain plan按钮(即执行计划),或者直接按F5即可。
PL/SQL DEVELOPER 基本用法详解(转)
CSDN
PL/SQL DEVELOPER 基本用法详解(建议写过第一个存储过程后的初手必读)
用过oracle的都抱怨,为了稳定 它提供的图形化操作 速度慢的让人伤心呀,p4+128M的机器只要启动一个
oracle服务就够让人伤心的,再在dba studio里面操作真能让人哭。
PL/SQLDeveloper使用技巧
1、PL/SQL Developer记住登陆密码
在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码;
设置方法:PL/SQL Developer 7.1.2 ->tools->Preferences->Oracle->Logon History , “Store history”是默认勾选的,勾上“Store with password” 即可,重新登录在输入一次密码则记住了。

PLSQL Dev 配置及使用技巧

PLSQL Dev 配置及使用技巧

1.创建一个Command WindowFile --> New --> Command Window2.设置保存登录密码Tools->Preferences->Oracle->Logon History,在右边界面的"Definition"中, "Store history"是默认勾选的,再勾选上"Store with password"即可3.设置保存当前布局Window --> Save Layout4.设置按F8键执行当前光标所在行的SQL语句在使用PL/SQL Developer的SQL Window时,按F8键,PL/SQL Developer默认是执行该窗口的所有SQL语句,需要设置为执行光标所在的那行SQL语句,即执行当前SQL语句;设置方法:tools->Preferences->Window types->SQL Window,勾上"AutoSelect Statement" 即可。

注意,每条语句后面要加分号。

5.设置SQL Window中显示行号Tools->Preferences->SQL Window->勾选“show gutter”6.格式化代码Edit --> PL/SQL Beautifier 或者直接按工具栏中的“PL/SQL Beautifier”按钮7.调用Oracle存储过程首先,在PL/SQL Developer左边的Browser中选Procedures,查找需要调用的存储过程;然后,选中调试的存储过程,点击右键,选择Test,在弹出来的Test script窗口中,对于定义为in类型的参数,需要给该参数的Value输入值;最后点击上面的条数按钮:Start debugger或者按F9;最后点击:RUN或者Ctrl+R8.配置关键字大写Tools->Preferences->User Interface --> Editor,将Keyword case选择Uppercase。

sqlserver存储过程调试方法

sqlserver存储过程调试方法

sqlserver存储过程调试方法SQL Server是一种常用的关系型数据库管理系统,它提供了存储过程的功能,可以在数据库中存储一段预编译的SQL代码,并在需要时进行调用。

存储过程通常用于执行复杂的数据库操作,提高数据库的性能和安全性。

在开发和调试存储过程时,我们需要一些方法来验证和调试代码的正确性。

本文将介绍一些常用的SQL Server 存储过程调试方法。

1. 使用PRINT语句输出调试信息在存储过程中,可以使用PRINT语句输出一些调试信息,例如变量的值、执行的步骤等。

通过在关键位置添加PRINT语句,可以观察存储过程执行过程中的中间结果,从而验证代码的正确性。

例如:```PRINT '开始执行存储过程'PRINT '变量@x的值为:' + CONVERT(VARCHAR(10), @x)```2. 使用SELECT语句输出结果集在存储过程中,可以使用SELECT语句返回结果集。

通过在存储过程中添加SELECT语句,可以观察查询结果并验证代码的正确性。

例如:```SELECT * FROM 表名 WHERE 条件```3. 使用TRY...CATCH块捕获异常在存储过程中,可以使用TRY...CATCH块来捕获异常并处理错误。

通过在TRY块中执行代码,在CATCH块中处理异常信息,可以更好地调试存储过程并处理潜在的错误。

例如:```BEGIN TRY-- 执行代码END TRYBEGIN CATCH-- 处理异常END CATCH```4. 使用SET NOEXEC语句暂停执行在存储过程中,可以使用SET NOEXEC语句来暂停执行。

通过在存储过程中添加SET NOEXEC语句,并将其设置为ON或OFF,可以控制存储过程的执行。

例如:```SET NOEXEC ON -- 暂停执行SET NOEXEC OFF -- 恢复执行```5. 使用SET SHOWPLAN_ALL语句显示执行计划在存储过程中,可以使用SET SHOWPLAN_ALL语句来显示执行计划。

plsql用法,操作介绍

plsql用法,操作介绍

plsql用法,操作介绍PL/SQL是Oracle数据库中一种重要的编程语言,它提供了强大的数据处理和数据库操作能力。

本文将向大家介绍PL/SQL的用法和操作。

一、PL/SQL基础PL/SQL是一种过程化的编程语言,它可以在Oracle数据库中执行存储过程、函数、触发器和包等对象。

这些对象可以由用户自定义,并在数据库中存储,以供其他用户调用。

PL/SQL提供了丰富的数据类型、控制结构、函数和过程,使得开发者可以方便地编写复杂的数据库操作程序。

二、PL/SQL语法1. 声明语句:在PL/SQL中,需要先声明变量和常量,常见的声明语句有:变量声明(如:变量类型数据类型;),常量声明(如:CONST 常量名数据类型 = 值)。

2. 条件语句:PL/SQL支持多种条件语句,如IF-THEN-ELSE,CASE表达式等。

3. 循环语句:PL/SQL支持FOR循环、WHILE循环和LOOP循环等。

4. 异常处理:PL/SQL提供了异常处理机制,可以捕获和处理运行时出现的错误。

5. 函数和过程:PL/SQL支持定义函数和过程,可以对数据进行操作并返回结果。

三、PL/SQL操作1. 创建存储过程:可以使用CREATE PROCEDURE语句创建存储过程,指定过程的名称、参数和执行逻辑。

2. 调用存储过程:可以使用CALL语句调用存储过程,并传递参数。

3. 创建函数:可以使用CREATE FUNCTION语句创建函数,指定函数的名称、参数和返回值类型。

4. 调用函数:可以使用直接调用函数的方式或通过存储过程调用函数。

5. 创建触发器:可以使用CREATE TRIGGER语句创建触发器,用于在数据插入、更新或删除时触发特定的操作。

6. 修改和删除对象:可以使用ALTER PROCEDURE、DROP PROCEDURE、DROP FUNCTION等语句修改或删除已存在的PL/SQL对象。

四、示例以下是一个简单的PL/SQL程序示例,用于将输入的字符串转换为大写并输出:```plsqlDECLAREv_str VARCHAR2(100);v_upper VARCHAR2(100);BEGIN-- 获取输入字符串:in_str := 'hello world';v_str := :in_str;-- 将字符串转换为大写并输出v_upper := UPPER(v_str);DBMS_OUTPUT.PUT_LINE('转换后的字符串为: ' || v_upper);END;```在上述示例中,我们使用了DECLARE语句声明了两个变量v_str 和v_upper,分别用于存储输入的字符串和转换后的结果。

plsql使用技巧

plsql使用技巧

plsql使用技巧PL/SQL是Oracle数据库的一种编程语言,可以用于编写存储过程、触发器、函数等程序。

本文将从以下几个方面介绍PL/SQL的使用技巧:一、变量和常量的使用1.1 变量的定义在PL/SQL中,可以使用DECLARE语句来定义变量。

例如:DECLAREv_name VARCHAR2(100);BEGINv_name := 'John';END;1.2 常量的定义在PL/SQL中,可以使用CONSTANT关键字来定义常量。

例如:DECLAREc_pi CONSTANT NUMBER := 3.1415926;BEGINNULL;END;1.3 变量和常量的命名规则在PL/SQL中,变量和常量的命名规则与其他编程语言类似。

变量和常量的名称必须以字母开头,并且只能包含字母、数字和下划线。

二、条件语句的使用2.1 IF语句IF语句用于根据条件执行不同的代码块。

例如:DECLAREv_age NUMBER := 18;BEGINIF v_age >= 18 THENDBMS_OUTPUT.PUT_LINE('You are an adult.');ELSEDBMS_OUTPUT.PUT_LINE('You are a minor.');END IF;END;2.2 CASE语句CASE语句用于根据不同情况执行不同代码块。

例如:DECLAREv_day_of_week NUMBER := 5;BEGINCASE v_day_of_weekWHEN 1 THEN DBMS_OUTPUT.PUT_LINE('Monday');WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('Tuesday');WHEN 3 THEN DBMS_OUTPUT.PUT_LINE('Wednesday'); WHEN 4 THEN DBMS_OUTPUT.PUT_LINE('Thursday'); WHEN 5 THEN DBMS_OUTPUT.PUT_LINE('Friday');ELSE DBMS_OUTPUT.PUT_LINE('Weekend');END CASE;END;三、循环语句的使用3.1 FOR循环FOR循环用于执行一组代码块一定次数。

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);在调用过程时,需要传递与过程定义中参数类型和顺序匹配的参数值。

解决plsql调试存储过程卡住

解决plsql调试存储过程卡住

>> PLSQL调试存储过程卡死
有多次进行TEST调试存储过程,在某一个环境动不了,然后卡住,plsql界面进入假死状态了,而这个时候只有在windows里面的任务管理器里面强行关闭plsql的后台进程后,然后再次登录打开plsql,才能操作。

但是这种强性杀死plsql进程后重新登录plsql的做法不能解决问题,因为你上次调试存储过程的ka住的进程依然存在后台等待,并且会再次影响你第二次进行存储过程调试,那么有没有办法彻底解决呢?
如下图,元芳,你怎么看?
PS:plsql假死图:
图(1)PLSQL假死图
第一种办法(PLSQL解决)
此时,重新打开第二个plsql窗口,使用dba账号登录,进入“Tools”--> “Sessions…”界面,可以看到所有的sessions会话进程,如下所示:
图(2)查看当前所有sessions
然后看到“Action”一栏目,看到有Test字样的,再看“Machine”确定是你操作的电脑发起的session,然后选中,右键弹出选中“kill”命令,然后选中“Yes”清除这条调试存储过程的会话即可,如下图所示:
图(3)清除session
第二种办法(SQL)
执行sql语句:select * from v$session t where t.ACTION like'%Test%';找到当前进行存储过程调试的session,然后执行kill命令:。

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调用存储过程的sql语句

oracle调用存储过程的sql语句

oracle调用存储过程的sql语句
Oracle数据库中,调用存储过程可以使用SQL语句,具体步骤如下:
1. 创建存储过程
先在数据库中创建存储过程。

例如,创建一个名为'my_proc'的存储过程,代码如下:
CREATE OR REPLACE PROCEDURE my_proc
IS
BEGIN
-- 存储过程的具体操作,可以包括SQL语句、PL/SQL代码等 ...
END;
2. 调用存储过程
在SQL语句中调用存储过程,可以使用如下语句:
BEGIN
my_proc; -- 调用存储过程
END;
调用存储过程时,可以传入参数。

例如,假设存储过程需要传入一个参数'param1',可以使用如下语句:
BEGIN
my_proc(param1); -- 调用存储过程,并传入参数
END;
在SQL语句中调用存储过程时,还可以将存储过程的返回值赋值给变量。

例如,假设存储过程返回一个数值类型的值'result',可以使用如下语句:
DECLARE
result NUMBER;
BEGIN
result := my_proc; -- 调用存储过程,并将返回值赋值给result变量
END;
以上是Oracle调用存储过程的SQL语句的简要介绍。

在实际使用中,需要根据具体情况灵活应用。

PLSQL常用设置

PLSQL常用设置

PL/SQL代码提示:1. 手动提示设置: key configuration ->Tools/Code Assistance 改成Alt+/2. 自动提示设置: tools-->preferences-->user interface-->codeassistant-->authomatically activatedPL/SQL显示Window List列表: tools->Window List , Window->Save Layout PL/SQL中关键字设置: tools-->preferences-->userinterface-->Editor-->Keyword case1、PL/SQL Developer记住登陆密码在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码;设置方法:PL/SQL Developer 7.1.2 ->tools->Preferences->Oracle->Logon History ,“Store history”是默认勾选的,勾上“Store with password” 即可,重新登录在输入一次密码则记住了。

2、执行单条SQL语句在使用PL/SQL Developer的SQL Window时,按F8键,PL/SQL Developer 默认是执行该窗口的所有SQL语句,需要设置为鼠标所在的那条SQL语句,即执行当前SQL语句;设置方法:PL/SQL Developer 7.1.2 -->tools->Preferences-->Windowtypes Sql Windows ,勾上“AutoSelect Statement” 即可。

3、格式化SQL语句在使用PL/SQL Developer的SQL Window时,有时候输入的SQL语句太长或太乱,希望能用比较通用的写法格式话一下,这样看起来会好看些,也好分析;使用方法:选中需要格式化的SQL语句,然后点击工具栏的PL/SQL beautifier 按钮即可.4、查看执行计划在使用PL/SQL Developer的SQL Window时,有时候输入的SQL语句执行的效率,分析下表结构,如何可以提高查询的效率,可以通过查看Oracle提供的执行计划;使用方法:选中需要分析的SQL语句,然后点击工具栏的Explain plan按钮(即执行计划),或者直接按F5即可。

跟我学Oracle从入门到精通培训教程——PLSQL中的存储过程及应用

跟我学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代码块以调用该存储 过程

PLSQL_Developer使用方法及技巧

PLSQL_Developer使用方法及技巧

PLSQL_Developer使用方法及技巧1、PL/SQL Developer记住登陆密码在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle 的用户名和密码;设置方法:PL/SQL Developer 7.1.2 ->tools->Preferences->Oracle->Logon History ,“Store history”是默认勾选的,勾上“Store with password” 即可,重新登录在输入一次密码则记住了。

2、执行单条SQL语句在使用PL/SQL Developer的SQL Window时,按F8键,PL/SQL Developer默认是执行该窗口的所有SQL语句,需要设置为鼠标所在的那条SQL语句,即执行当前SQL语句;设置方法:PL/SQL Developer 7.1.2 -->tools->Preferences-->Window types ,勾上“AutoSelect Statement” 即可。

3、格式化SQL语句在使用PL/SQL Developer的SQL Window时,有时候输入的SQL语句太长或太乱,希望能用比较通用的写法格式话一下,这样看起来会好看些,也好分析;使用方法:选中需要格式化的SQL语句,然后点击工具栏的PL/SQL beautifier按钮即可.4、查看执行计划在使用PL/SQL Developer的SQL Window时,有时候输入的SQL语句执行的效率,分析下表结构,如何可以提高查询的效率,可以通过查看Oracle提供的执行计划;使用方法:选中需要分析的SQL语句,然后点击工具栏的Explain plan按钮(即执行计划),或者直接按F5即可。

5、调试存储过程在使用PL/SQL Developer操作Oracle时,有时候调用某些存储过程,或者调试存储过程;调用存储过程的方法:首先,在PL/SQL Developer左边的Browser中选择Procedures,查找需要调用的存储过程;然后,选中调试的存储过程,点击右键,选择Test,在弹出来的Test scrīpt窗口中,对于定义为in类型的参数,需要给该参数的Value输入值;最后点击上面的条数按钮:Start debugger 或者按F9;最后点击:RUN 或者Ctrl+R PL/SQL DEVELOPER 基本用法详解(转)转自CSDNPL/SQL DEVELOPER 基本用法详解(建议写过第一个存储过程后的初手必读)用过oracle的都抱怨,为了稳定它提供的图形化操作速度慢的让人伤心呀,p4+128M 的机器只要启动一个oracle服务就够让人伤心的,再在dba studio里面操作真能让人哭。

ORACLE_PLSQL存储过程教程

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语句答:在语句块中加空语句,用于补充语句的完整性。

PostgreSQL存储过程中in、out、inout参数

PostgreSQL存储过程中in、out、inout参数

PostgreSQL存储过程中in、out、inout参数传参类型说明:in: 是参数的默认模式,这种模式就是在程序运⾏的时候已经具有值,在程序体中值不会改变。

out: 模式定义的参数只能在过程体内部赋值,表⽰该参数可以将某个值传递回调⽤他的过程。

简单说:out参数在调⽤的时候,不需要传⼊参数(尝试传⼊会报错),不需要rutrun该参数,function结束会⾃动返回该out参数。

in out:表⽰参数可以向该过程中传递值,也可以将某个值传出去。

简单说:传参要指定对应参数,结束的时候,还需要专门当out参数去获取。

这⾥是以类PG数据库做的实验,本质基本相同:1.创建类型、数组类型:DROP TABLE test_type CASCADE ;DROP TYPE test_type CASCADE ;CREATE type test_type as (id INT,info varchar(32));DROP TYPE test_type_Array;CREATE TYPE test_type_Array AS TABLE OF test_type;2.创建测试表,填充测试数据:DROP TABLE test;CREATE TABLE test(id VARCHAR(32), info varchar(32), crt_time TIMESTAMP);INSERT INTO test values('1', 'test1', now());INSERT INTO test values('1', 'test11', now());INSERT INTO test values('2', 'test2', now());3.创建四个function,分别测试简单类型和对象类型(这⾥创建数组来测试):/** 测试简单类型的in out参数使⽤,参数需要指定,结果需要当做out参数获取** exp:v_info := test_fnc(v_record_id, v_info);*/CREATE OR REPLACE FUNCTION test_fnc(id VARCHAR(32), info IN OUT varchar(32)) RETURNS varchar(32) AS$$BEGINinfo := info|| '_connect_' || id;raise notice 'info is: %', info;END$$LANGUAGE plsql;/** 测试简单类型的out参数使⽤,参数不需要指定,结果需要获取** exp:v_info := test_fnc2(v_record_id);*/CREATE OR REPLACE FUNCTION test_fnc2(id VARCHAR(32), info OUT varchar(32)) RETURNS varchar(32) AS$$BEGINinfo := info|| '_connect_' || id;raise notice 'info is: %', info;END$$LANGUAGE plsql;/** 测试数组类型的in out参数使⽤,参数需要指定,结果需要当做out参数获取** exp:test_A := test_array_fnc(v_record_id, test_A);*/CREATE OR REPLACE FUNCTION test_array_fnc(v_id VARCHAR(32), test_A IN OUT test_type_Array) RETURNS test_type_Array AS$$DECLAREv_num int;one_type_value test_type;CURSOR test_values IS SELECT * FROM test WHERE id = v_id;BEGINv_num := 1;FOR one_value IN test_values LOOPone_type_value.id := one_value.id;one_type_ := one_;test_A.extend;test_A(v_num) := one_type_value;raise notice 'v_num is: %', v_num;raise notice 'test_A.count is: %', test_A.count;v_num := v_num + 1;END LOOP;END$$LANGUAGE plsql;/** 测试数组类型的out参数使⽤,参数不需要指定,结果需要获取** exp:test_A := test_array_fnc2(v_record_id);*/CREATE OR REPLACE FUNCTION test_array_fnc2(v_id VARCHAR(32), test_A OUT test_type_Array) RETURNS test_type_Array AS $$DECLAREv_num int;one_type_value test_type;CURSOR test_values IS SELECT * FROM test WHERE id = v_id;BEGINv_num := 1;test_A := test_type_Array();FOR one_value IN test_values LOOPone_type_value.id := one_value.id;one_type_ := one_;test_A.extend;test_A(v_num) := one_type_value;raise notice 'v_num is: %', v_num;raise notice 'test_A.count is: %', test_A.count;v_num := v_num + 1;END LOOP;END$$LANGUAGE plsql;4.在匿名块中测试:DO$BODY$DECLAREtest_A test_type_Array;v_record_id varchar(32);v_info varchar(32);BEGINv_record_id := '1';raise notice 'test object, like array. must use "in out":';test_A := test_type_Array();test_A := test_array_fnc(v_record_id, test_A);raise notice 'out: test_A.count is: %', test_A.count;raise notice '';raise notice 'execute again, the object value will in the function:';test_A := test_array_fnc(v_record_id, test_A);raise notice 'out: test_A.count is: %', test_A.count;--NOTICE:这样的⽤法,不会因为是in out参数⽽直接给参数赋值,相当于只是将参数传递进去了raise notice '';raise notice 'do not get the result:';test_array_fnc(v_record_id, test_A);raise notice 'out: test_A.count is: %', test_A.count;raise notice '';raise notice 'test object, like array. use "out":';test_A := test_array_fnc2(v_record_id);raise notice 'out: test_A.count is: %', test_A.count;v_info := 'init';raise notice '';raise notice 'test vachar, use "in out":';v_info := test_fnc(v_record_id, v_info);raise notice 'out: test_fnc: v_info is: %', v_info;raise notice '';raise notice 'test varchar, just use "out":';v_info := test_fnc2(v_record_id);raise notice 'out: test_fnc2: v_info is: %', v_info;END$BODY$5.测试结果:test object, like array. must use "in out":v_num is: 1test_A.count is: 1v_num is: 2test_A.count is: 2out: test_A.count is: 2execute again, the object value will in the function:v_num is: 1test_A.count is: 3v_num is: 2test_A.count is: 4out: test_A.count is: 4--上⾯可以看出,传⼊和传出都获取了相应的值。

PLSQLDeveloper使用技巧、快捷键

PLSQLDeveloper使用技巧、快捷键

PLSQLDeveloper使⽤技巧、快捷键1、类SQL PLUS窗⼝:File->New->Command Window,这个类似于oracle的客户端⼯具sql plus,但⽐它好⽤多了。

2、设置关键字⾃动⼤写:Tools->Preferences->Editor,将Keyword case选择Uppercase。

这样在窗⼝中输⼊sql语句时,关键字会⾃动⼤写,⽽其它都是⼩写。

这样阅读代码⽐较容易,且保持良好得编码风格,同理,在Tools->Preferences->Code Assistant(助⼿)⾥可以设置代码提⽰延迟时间、输⼊⼏个字符时提⽰、数据库对象的⼤写、⼩写,⾸字母⼤写等;3、查看执⾏计划:选中需要分析的SQL语句,然后点击⼯具栏的Explain plan按钮(即执⾏计划),或者直接按F5;这个主要⽤于分析SQL语句执⾏效率,分析表的结构,便于为sql调优提供直观依据;4、⾃动替换:快捷输⼊SQL语句,例如输⼊s,按下空格,⾃动替换成SELECT;再例如,输⼊sf,按下空格,⾃动替换成SELECT * FROM,⾮常⽅便,节省了⼤量的时间去编写重复的SQL语句。

设置⽅法:菜单Tools–>Preferences–>Editor–>AutoReplace(⾃动替换)–>Edit1)、建⽴⼀个⽂本⽂件shortcuts.txt,并写⼊如下内容:s=SELECT复制代码另存到PL/SQL Developer的安装路径下的~/PlugIns⽬录下2)、Tools–>Preferences–>User Interface–>Editor–>AutoReplace,选中Enable复选框,然后浏览⽂件选中之前创建的shortcuts.txt,点击Apply。

3)、重启PL/SQL Developer,在sql窗⼝中输⼊s+空格,sc+空格做测试。

【PLSQL系列】Oracle存储过程使用动态SQL

【PLSQL系列】Oracle存储过程使用动态SQL

【PLSQL系列】Oracle存储过程使⽤动态SQLOracle存储过程相信⼤家都⽐较了解,下⾯就为您介绍Oracle存储过程使⽤动态SQL的⽅法,希望对您能够有所帮助。

CREATE OR REPLACE PROCEDURE P_STAT_SCORE01(PARA_EXAMGUID VARCHAR2, -- 考试ID A9093AE714AC47758A367B8813B99D1D,3216885E3B3148E3904908BD30BF9413,F8254D3E50F64819A996D1E369BBF053CUR OUT SYS_REFCURSOR)/****************************************************************************名称:P_STAT_SCORE02功能描述:根据考试ID,取出班级,考试科⽬信息修订记录:版本号编辑时间编辑⼈修改描述1.0.0 2016-4-7 CHEQNP 1.创建此存储过程,修改动态SQL语句,主要包括变量的使⽤和WHERE语句的书写注释⼊参出参描述:PARA_EXAMGUID 考试IDCUR 输出游标*****************************************************************************/AS-- 定义变量VAR_SQL CLOB; -- 拼接SQLVAR_TEACHER_SQL CLOB; -- 科任⽼师VAR_COURSENAME VARCHAR(200); -- 科⽬名称BEGINVAR_SQL := 'SELECT(CASE WHEN CLASSROOM_NAME IS NULL THEN ''合计'' ELSE MIN(CLASSROOM_NAME) END) AS 班级 ';-- 取应考⼈数,实考⼈数VAR_SQL := VAR_SQL || ' ,NVL2(CLASSROOM_NAME,(SELECT COUNT(1) FROM TPRG_STUDENT aLEFT JOIN TPRG_CLASSROOM bON a.CLASSROOM_ID = b.CLASSROOM_IDWHERE b.CLASSROOM_NAME = T.CLASSROOM_NAME ),(SELECT COUNT(1) FROM TPRG_STUDENTWHERE CLASSROOM_IDIN (SELECT CLASSROOM_IDFROM V_FULL_SCOREWHERE EXAMGUID = '''||PARA_EXAMGUID||'''GROUP BY CLASSROOM_ID))) 应考⼈数,COUNT(DISTINCT STUDID) AS 实考⼈数 ';-- 定义游标myCusor-- 根据考试ID查询考试科⽬,并按照COURSEID⽣成科⽬顺序DECLARE CURSOR myCusor IS SELECT COURSENAME FROM V_FULL_SCORE WHERE EXAMGUID = ''||PARA_EXAMGUID||''GROUP BY COURSEID,COURSENAMEORDER BY COURSEID ASC;-- 开始使⽤游标取数据BEGINOPEN myCusor;LOOPFETCH myCusor INTO VAR_COURSENAME;-- 游标取不到数据则退出EXIT WHEN myCusor%NOTFOUND;-- 动态拼接各科⽬SQL语句VAR_SQL := VAR_SQL || ' , ROUND(SUM(CASE COURSENAME WHEN '''||VAR_COURSENAME||''' THEN SCORE_SUM ELSE 0 END) / SUM(CASE COURSENAME WHEN '''||VAR_COURSENAME||''' THEN 1 ELSE NULL END),2) '| , MAX(CASE COURSENAME WHEN '''||VAR_COURSENAME||''' THEN SCORE_SUM ELSE 0 END) '||VAR_COURSENAME||'最⾼分, SUM(CASE WHEN COURSENAME = '''||VAR_COURSENAME||''' AND SCORE_SUM >= FULLSCORE_SUM * 0.6 THEN 1 ELSE 0 END) '||VAR_COURSENAME||'_及格⼈数, ROUND(SUM(CASE WHEN COURSENAME = '''||VAR_COURSENAME||''' AND SCORE_SUM >= FULLSCORE_SUM * 0.6 THEN 1 ELSE 0 END) / SUM(CASE COURSENAME WHEN '''||VAR_COURSENAME||''' THEN 1 ELSE NULL E , SUM(CASE WHEN COURSENAME = '''||VAR_COURSENAME||''' AND SCORE_SUM >= FULLSCORE_SUM * 0.8 THEN 1 ELSE 0 END) '||VAR_COURSENAME||'_优分⼈数, ROUND(SUM(CASE WHEN COURSENAME = '''||VAR_COURSENAME||''' AND SCORE_SUM >= FULLSCORE_SUM * 0.8 THEN 1 ELSE 0 END) / SUM(CASE COURSENAME WHEN '''||VAR_COURSENAME||''' THEN 1 ELSE NULL E VAR_TEACHER_SQL := VAR_TEACHER_SQL || ' NULL AS ' || VAR_COURSENAME||'_科任⽼师 , ';END LOOP;CLOSE myCusor;END;-- 科任教师部分字符串去掉逗号VAR_TEACHER_SQL := SUBSTR(TRIM(VAR_TEACHER_SQL),1,LENGTH(TRIM(VAR_TEACHER_SQL))-1);-- 拼接科任教师部分VAR_SQL := VAR_SQL || ',' || VAR_TEACHER_SQL;-- 按照班级名称,科⽬名称,学⽣得到每个学⽣总分-- 根据班级进⾏分组VAR_SQL := VAR_SQL || ' FROM (SELECT CLASSROOM_NAME,COURSENAME,STUDID,STUD_NAME,SUM(SCORE) AS SCORE_SUM,SUM(FULLSCORE) AS FULLSCORE_SUMFROM V_FULL_SCOREWHERE EXAMGUID = '''||PARA_EXAMGUID||'''GROUP BYCLASSROOM_NAME,COURSENAME,STUDID,STUD_NAME) TGROUP BY ROLLUP(CLASSROOM_NAME)';DBMS_OUTPUT.PUT_LINE(VAR_SQL);OPEN CUR FOR VAR_SQL;END ;。

Oracleplsql存储过程中out模式参数的用法

Oracleplsql存储过程中out模式参数的用法
end out_test;
在命令行ቤተ መጻሕፍቲ ባይዱ调用该存储过程,利用绑定变量
SQL> var v_user varchar2(20); SQL> var v_salary number; SQL> var v_deptno number; SQL> exec :v_user := 'Lisi';
PL/SQL procedure successfully completed v_user --------Lisi
SQL> exec out_test(:v_user, :v_salary, :v_deptno);
PL/SQL procedure successfully completed v_user --------Lisi v_salary --------11500 v_deptno --------20
begin select salary, emp_deptno into v_salary, v_deptno from emp where user_name = v_user;
exception when NO_DATA_FOUND then dbms_output.put_line('No data found'); when TOO_MANY_ROWS then dbms_output.put_line('Too many rows found');
在plsql中存储过程中的out模式的参数可以用来返回数据相当于函数的返回值
Oracleplsql存储过程中 out模式参数的用法
在plsql中,存储过程中的out模式的参数可以用来返回数据,相当于函数的返回值。下面是一个小例子。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档