当前位置: 首页 > news >正文

PL/SQL 安装配置与使用

目录

一、安装与配置

(一)下载PLSQL Developer

(二)下载并配置免安装Oracle客户端

1. 下载Instantclient_11_2

2. 配置环境

(1)配置电脑的环境变量

(2)配置PLSQL Developer的环境变量

3. 配置PLSQL的Oracle数据库链接

二、objects 说明

(一)Tables、Views

(二)Packages、package bodies、Procedures

(三)Function、Types

(四)DBMS_Jobs

        查看所有job任务:

        终止某个job任务:

        开启某个job任务:

        终止所有job任务:

        开启所有job任务:

        注意:

(五)查询存储过程、函数或包体中是否引用某内容

三、基础设置

(一)快捷键

1. 快捷键设置

2. 快捷键说明

(二)记住登录密码

(三)关键字自动大写

(四)SQL Windows显示行号

(五)解决软件过期

(六)解决执行时的问题弹窗

四、包和包体

呈现方式:

作用:

使用:

1. 查看

2. 拷贝

五、procedure 存储过程

(一)定义(创建)

1. 组成

2. 写法(未涉及包和包体)

3. 写法(涉及包和包体)

(1)创建包(内含procedure定义)

(2)创建包体(内含procedure实现)

4. 修改

(二)知识点

1. 字符串必须用单引号括起来

2. “:=”符号

3.“||”符号

4. 在后续的Oracle SQL知识点这一篇中

六、包、存储过程的SQL查询

(一)查询名称(针对包、存储过程)

(二)查询内容(针对包、存储过程)

七、存储过程的断点调试

1. 打断点

2. 打开断点调试框

3. 输入和输出

(1)输入值

(2)输出格式

4. 开始调试

5. 查看调试过程中的变量值

(1)鼠标放在变量上,查看当前值。

(2)在下方工具栏中的Script中输入想查看的变量值

八、SQL调试

九、搜索查询


一、安装与配置

以下内容是针对PLSQL Developer 14(免安装客户端)、Oracle数据库(免安装客户端)。

(一)下载PLSQL Developer

        下载的是PLSQL Developer 14免安装包。

(二)下载并配置免安装Oracle客户端

1. 下载Instantclient_11_2

        该包是PL/SQL免安装Oracle客户端所需。

        官方链接:https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

2. 配置环境

(1)配置电脑的环境变量

若使用免安装客户端的Oracle,需要配置环境变量。

右击此电脑 > 内容 > 新增系统变数(以下三个),并重启电脑。

变量名 变量值备注
TNS_ADMIN E:\PLSQL\Instantclient_11_2\network\admin 用于配置Oracle,以自己存放的位置为准
ORACLE_HOMEE:\PLSQL\Instantclient_11_2用于配置Oracle,以自己存放的位置为准
NLS_LANGAMERICAN_AMERICA.AL32UTF8用于配置语言
(2)配置PLSQL Developer的环境变量

用系统管理员身份打开plsqldev.exe,找到工具栏的Configure > Preferences,配置Oracle的Connection中Oracle Home和OCI library的路径,其中,

Oracle Home的配置路径是:E:\PLSQL\Instantclient_11_2

OCI library的配置路径是:E:\PLSQL\Instantclient_11_2\oci.dll

如果未配置的话,PL/SQL连数据库时会报错报Ora-12557

3. 配置PLSQL的Oracle数据库链接

        每个数据库链接,都需要在Instantclient_11_2文件夹的network\admin的tnsnames.ora文件中设置。

        首次需要新建network\admin目录,并新建tnsnames.ora文件,文件路径为:

                E:\PLSQL\Instantclient_11_2\network\admin\tnsnames.ora 。

        文件内容如下:

                以下只是配置数据库HOST和SID,而用户和密码是在打开PL/SQL软件时在登录弹出框中输入填写。

DB名=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.XX.XX.XXX)(PORT=1521)))(CONNECT_DATA=(SID=DB名)(SERVER=DEDICATED)))
DB名2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.XX.XX.XXX)(PORT=1521)))(CONNECT_DATA=(SID=DB名2)(SERVER=DEDICATED)))

二、objects 说明

主要的objects有:

(一)Tables、Views

        作用:Views是查询另一个账户中的表数据,Tables是对Views中的数据进一步处理,存入报表数据。

(二)Packages、package bodies、Procedures

        作用:供代码调用包中的存储程序。

(三)Function、Types

        作用:供存储程序中的SQL调用。

(四)DBMS_Jobs

        作用:设置定时任务。

        查看所有job任务:

SELECT * FROM all_jobs; 或 SELECT * FROM user_jobs;

        终止某个job任务:

BEGINDBMS_JOB.BROKEN(job => job的ID, broken => TRUE);COMMIT;
END;

        开启某个job任务:

BEGINDBMS_JOB.BROKEN(job => <job_id>, broken => FALSE);COMMIT;
END;

        终止所有job任务:

BEGINFOR job IN (SELECT job FROM all_jobs WHERE broken = 'N') LOOPDBMS_JOB.BROKEN(job.job, TRUE);END LOOP;COMMIT;
END;

        开启所有job任务:

BEGINFOR job IN (SELECT job FROM all_jobs WHERE broken = 'Y') LOOPDBMS_JOB.BROKEN(job.job, FALSE);END LOOP;COMMIT;
END;

        注意:

        针对tables创建数据的SQL语句,即,使用PL/SQL执行插入SQL语句时,一定要在insert语句后加上COMMIT;。或者执行插入SQL语句后,再点击提交按钮,如下图:

(五)查询存储过程、函数或包体中是否引用某内容

SELECT owner, name,  type, line, text
FROM   all_source
WHERE  UPPER(text) LIKE '%MUSIC%'
ORDER  BY owner, name, line;

三、基础设置

(一)快捷键

1. 快捷键设置

        在工具栏的Configure > Preference > User Interface > Key Configuration中设置

2. 快捷键说明

        F8:执行SQL语句

        Ctrl+/:注释(需要先选中需要注释的句子)

        Ctrl+/+Shift:取消注释(需要先选中句子)

(二)记住登录密码

        在工具栏的Configure > Preference > Oracle > Logon History中设置,默认勾选“Store history”,还需勾选“Store with password”。

(三)关键字自动大写

        在工具栏的Configure > Preference > User Interface > Editor中设置,Keyword case选择:Uppercase。

(四)SQL Windows显示行号

        在工具栏的Configure > Preference > Window Types > SQL Window中设置,勾选show gutter(line numbers)。

(五)解决软件过期

若反复出现下图的问题:

解决办法如下:

        首先,Windows + R ,输入 regedit,打开注册表。

        再找到 HKEY_CURRENT_USER\Software\Allround Automations,删除 Allround Automations 目录。

        然后找到 HKEY_CURRENT_USER\Software\Microsoft\Security,删除 Security 目录。

        最后,重新打开软件即可。30天到期后,重复该操作。

(六)解决执行时的问题弹窗

如果在执行SQL查询时,出现如下弹窗,则提示权限不够。

可以授予该用户的V$session,V$sesstat、V$statname的权限,也可取消自动统计功能,可在工具栏 > Configure > Preferences > Oracle > Options > 取消勾选Auto statistics,点击OK。

四、包和包体

呈现方式:

作用:

        管理SQL语句、程序单元(存储过程、函数等)。

        其中包是声明接口、包体是实现接口。

使用:

1. 查看

        查看Procedure具体内容时,需要在包体名(包体,而不是包)上右击,选择View(View,而不是View Spec)进行查看。

2. 拷贝

        若想拷贝Procedure内容,可在存储过程名上右击,选择copy进行拷贝。

五、procedure 存储过程

(一)定义(创建)

1. 组成

        参数(IN、OUT)、局部变量、逻辑代码块、异常处理。

2. 写法(未涉及包和包体)

CREATE [OR REPLACE] PROCEDURE 存储过程名(/* 声明参数 */p_id IN NUMBER,  -- 输入参数、数值类型p_name IN VARCHAR2, -- 输入参数、字串类型p_date IN DATE, -- 输入参数、时间类型p_res OUT VARCHAR2 -- 输出参数、字串类型
) IS
/* 声明外部变量(在下面第一个BEGIN的内部外部中,都能使用) */
// 存储过程中不能使用declare关键字。
变量名 类型; // 比如:count number;
/* 逻辑代码块 */
BEGIN/* 声明局部变量(只能在该BEGIN的内部中使用,不能在该BEGIN外部使用) */变量名 类型; // 只是声明变量名 类型 := 默认值; // 包括赋值/* 过程体 */NULL;  -- 至少需要一个语句
/* 异常处理 */
EXCEPTIONWHEN NO_DATA_FOUND THEN  ---没有任何数据的异常--处理代码WHEN OTHERS THEN  --- 其他异常--处理代码
END 存储过程名; --也可省略存储过程名

3. 写法(涉及包和包体)

(1)创建包(内含procedure定义)
CREATE [OR REPLACE] PACKAGE 包名 ISTYPE refcur IS REF CURSOR; ---定义外部变量(包和包体都可用)-- 声明过程PROCEDURE procedure名(参数名  IN VARCHAR2,参数名  IN VARCHAR2,参数名  OUT refcur,参数名  OUT CLOB,参数名  OUT NUMBER);
END 包名;
(2)创建包体(内含procedure实现)
CREATE [OR REPLACE] PACKAGE BODY 包体名 IS-- 过程实现PROCEDURE procedure名(参数名 IN VARCHAR2,参数名 IN VARCHAR2,参数名  OUT refcur,参数名  OUT CLOB,参数名  OUT NUMBER) ISBEGINDBMS_OUTPUT.PUT_LINE('OUT RES: ');END;
END 包体名;

4. 修改

        右击包或包名 > Edit > 修改SQL语句 > 按下F8重新执行整个SQL语句,执行成功无异常即可。

(二)知识点

1. 字符串必须用单引号括起来

2. “:=”符号

        变量赋值。

3.“||”符号

        代表“连接字串”,而不是“或”。

4. 在后续的Oracle SQL知识点这一篇中

六、包、存储过程的SQL查询

(一)查询名称(针对包、存储过程)

---查看所有package包名
SELECT object_name
FROM user_objects --- user_objects针对当前用户。all_objects针对所有用户(若是特定用户,需在where后补充 AND owner = '用户名'的条件)
WHERE object_type = 'PACKAGE'
AND ROWNUM <= 100;
---查看所有package body包体名
SELECT object_name
FROM user_objects 
WHERE object_type = 'PACKAGE BODY' 
AND ROWNUM <= 100;
---查看所有procedure存储过程名
SELECT object_name
FROM user_procedures --- user_procedures针对当前用户,all_procedures针对所有用户
WHERE ROWNUM <= 100;

(二)查询内容(针对包、存储过程)

---查看package包内容
SELECT text
FROM user_source
WHERE name = 'PKG_REPORTMANAGE'  -- 包名全大写
AND type = 'PACKAGE'
AND ROWNUM <= 100;
---查看package body包体内容
SELECT text
FROM user_source
WHERE name = 'PKG_REPORTMANAGE'  -- 包名全大写
AND type = 'PACKAGE BODY'
AND ROWNUM <= 100;
---查看procedure存储过程内容
SELECT text
FROM user_source
WHERE name = 'AAAAA'  -- 存储过程的名称(全大写)
AND type = 'PROCEDURE'    -- 确保是存储过程
AND ROWNUM <= 100;
---查看table表内容
select * from 表名  
WHERE ROWNUM <= 100;

七、存储过程的断点调试

1. 打断点

        首先查看存储过程(若存储过程放在包中,则右击包名,选择View,然后选择Procedure),在需要调试的代码处打上断点(在左侧行号显示处,打上断点,会有红色叉叉×)。

2. 打开断点调试框

        右击存储过程,选择Test,会新生成一个Call the procedure脚本内容。并且下方会有调试所需的IN参数、执行结果OUT参数的表格,如下图所示。注意,冒号是紧挨着后面的变量的!

3. 输入和输出

(1)输入值

        查看断点调试框下方的表格,是否有IN参数需要赋值,若有,则先将IN参数赋值。

(2)输出格式

        输出的长字串的Type,最好设置为CLOB(比string存更多内容)。

4. 开始调试

图标作用
带有搜索标志的三角开始执行调试
绿色三角切换断点(执行到下一个断点)
第1个正方形(蓝色)单步进入(执行一步,若有子过程,则进入)
第2个正方形(蓝色)单步经过(执行一步,不会进入子过程)
第3个正方形(蓝色)单步跳出(退出到上一级)
第4个正方形(蓝色)暂时未用
第5个正方形(红)执行到下一个异常代码

 

5. 查看调试过程中的变量值

(1)鼠标放在变量上,查看当前值。

(2)在下方工具栏中的Script中输入想查看的变量值

八、SQL调试

DECLARE-- 声明输入输出参数condition_author VARCHAR2(100) := 'luobogan'; -- 查询条件condition_publishplace VARCHAR2(100) := '童话出版社';condition_booktype VARCHAR2(100) := '教育';TYPE refcur IS REF CURSOR;cur_book_table refcur; -- 输出结果return_sql VARCHAR2(4000);  ---如果字符太长,使用CLOB(CLOB不能打印,最好使用:变量名,通过下方的变量值输出框来查看CLOB的值,比如说=> return_sql改成=>  :return_sql)return_code NUMBER;cursor_bookid Books.BOOKID%TYPE;cursor_bookname Books.BOOKNAME%TYPE;
BEGIN-- 调用存储过程PKG_BOOK.PC_QueryBook(Condition_Author => condition_author, --- 注意是=>,没有冒号,才能使用上方declare的值(否则会用下方的变量输出框中定义的值)Condition_PublishPlace => condition_publishplace,condition_BookType => condition_booktype,cur_BookTable => cur_book_table,return_sql => return_sql, -- 如果是CLOB最好补充冒号(查看值时,在下方变量值输出框中查看执行test返回的值)return_code => return_code);-- 打印返回的 SQL 语句DBMS_OUTPUT.PUT_LINE('return_sql: ' || return_sql);-- 遍历游标并输出数据LOOPFETCH cur_book_table INTO cursor_bookid,cursor_bookname;EXIT WHEN cur_book_table%NOTFOUND;DBMS_OUTPUT.PUT_LINE('Fetched Data: ' || cursor_bookid || ', ' || cursor_bookname);END LOOP;-- 关闭游标CLOSE cur_book_table;  
EXCEPTION-- 异常输出WHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('No data found');WHEN OTHERS THENDBMS_OUTPUT.PUT_LINE('another error: ' || DBMS_UTILITY.format_error_backtrace);
END; 

九、搜索查询

若想在该数据库中查找能够匹配某字串的地方,则使用Find Objects功能,如下图:

相关文章:

  • 力扣热题——零数组变换 |
  • LeetCode 93.复原IP地址 LeetCode 78.子集 LeetCode 90.子集II
  • SpringMVC所有注解按照使用位置划分
  • leetcode 旋转数组 java
  • 深度学习-mmcv中build_runner实例化全流程详解
  • 985,成立人工智能学院
  • T008-网络管理常用命令:ping,ipconfig,nslookup,route,netstat
  • upload-labs靶场通关详解:第12-13关
  • Leetcode百题斩-字典树
  • 如何在WordPress网站上添加即时聊天功能
  • 深度学习实战 04:卷积神经网络之 VGG16 复现三(训练)
  • docker 安装 Nacos
  • Linux下Docker使用阿里云镜像加速器
  • 在 JavaScript 中正确使用 Elasticsearch,第二部分
  • scNiche识别空间组细胞微环境
  • Index-AniSora模型论文速读:基于人工反馈的动漫视频生成
  • 系统思考:团队策略辅导
  • 02 if...else,switch,do..while,continue,break
  • List更简洁的编码构建
  • 基于C#的Modbus通信协议全面解析与实现指南
  • 区域、学校、课堂联动,上海浦东让AI素养培育贯穿基础教育全学段
  • 斗鱼一季度直播收入降近三成,语音社交服务推高广告等收入,称将持续打击涉赌行为
  • 联合国妇女署:超过2.8万名妇女和女童在加沙战火中丧生
  • 痴情与真爱
  • 花旗回应减员传闻:持续评估人力资源战略,将为受影响的个人提供支持
  • 最高法:依法惩治损害民营企业合法权益的串通投标行为