1、VNC连接考试云主机,考试前一天会测试是否连接上云主机;
2、打开VNC Viewer客户端,输入考试给定的云主机IP地址和密码,进入考试云主机;
3、按照考试要求作答,端口号设置、数据库密码配置、安装路径选择等;
4、在考试系统关闭前,正常关闭考试机器的数据库。
5、考试题目在dmdba的桌面上
快速、准确地处理每一笔交易,处理日常的、大量的增删改操作,要求高并发、低延迟,并且数据必须绝对正确。
典型操作:增、删、改、查,主要是单条或少量数据的更新。比如你下个订单、修改个密码。
数据规范化程度高,会设计很多表来避免数据冗余,数据实时性强。
从历史数据中分析规律,辅助决策,处理海量历史数据的复杂查询,生成报表。它关注的是扫描和计算大量数据的能力,允许秒级甚至分钟级的查询响应。
核心是查询 (SELECT),通常是大量的读取。它会进行按时间、地区、产品等维度的多角度汇总和分析。
数据冗余多,通常按主题(如销售、客户)组织,数据是历史的、相对静态的。
**1、原子性:**一个事务所有操作要么完成要么不完成;(操作的完整性)
**2、一致性:**无论事务成功还是失败,数据库里的数据必须始终是合理的,不能出现半成品或自相矛盾的状态;(数据的正确性)
(1)从约束上来看:需要满足数据状态,唯一索引约束,数据类型是否正确,非空约束,主外键约束等
(2)从事务角度来看:事务执行前后,数据库的状态一致,在事务执行中,状态可以不一致,数据可以不正确,事务结束后必须回到正确状态
(3)从责任上来看:50%数据库,处理违反数据约束的操作+50%应用程序,业务规则需要业务代码来检查
**3、持久性:**事务提交成功后,更改是永久性的;
**4、隔离性:**一个事物的中间状态不会被其他事物感知,事务与事务之间不会互相影响。
一般学习和测试下载的都为开发版,开发版与企业版一模一样,有时间限制,不能商用。
商用版本有key,分为三类:标准版(只能单机)、企业版(最常用,满足中大型企业,功能最全,性能最好)、安全版(在企业版上增加安全特性,强制访问控制)
CPU和内存推荐:2C4G / 2C8G
磁盘:/tmp 临时目录>3G
软件装GNOME桌面环境,DCA考试基本为图形化,SQL为最难的部分
达梦安装包中服务端和客户端在一个包里面
root路径下,DCA考试时这部分已创建好
groupadd dinstall useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba passwd dmdba
mkdir /dm chown dmdba:dinstall /dm ls -ld /dm
mount -o loop mount -o loop dm8_20240116_x86_rh7_64.iso /mnt ls -l /mnt
[root@192 桌面]# ls -l /mnt
总用量 1065229
-r-xr-xr-x 1 root root 2911452 3月 2 16:40 'DM8 Install.pdf'
-r-xr-xr-x 1 root root 1087882225 4月 28 13:28 DMInstall.bin
可以看到两个文件:DM8 Install.pdf 和 DMInstall.bin
DCA考试内已经挂载好镜像文件,可以直接用 DMInstall.bin 安装
[root@192 桌面]# echo $DISPLAY
:0.0
[root@192 桌面]#xhost +
access control disabled, clients can connect from any host
[root@192 桌面 ]# su dmdba
[dmdba@192 桌面]# echo $DISPLAY
:0.0
[dmdba@192 桌面]#xhost +
access control disabled, clients can connect from any host
[dmdba@192 桌面]$ cd /mnt
dmdba@192 mnt]$ ./DMInstall.bin
解压安装程序.........
硬件架构校验通过!
DCA考试简化上述图形化流程
考试时VNC登进来就是dmdba账号,没有root账号
所以可以直接执行:
[dmdba@192 桌面]# echo $DISPLAY
:0.0
[dmdba@192 桌面]#xhost +
access control disabled, clients can connect from any host
[dmdba@192 桌面]$ cd /mnt
dmdba@192 mnt]$ ./DMInstall.bin
解压安装程序.........
硬件架构校验通过!
注意看考试的时候给定的安装目录,来填写下面的安装目录
根据考试要求来,考试要求把目录放哪里就放哪里
根据考试要求来,考试要求什么名字就写什么名字
依次为控制文件、数据文件、日志文件、初始化日志
注意日志文件看题目要求,题目要求创建几个就为几个,不够的话点击添加按钮进行添加
日志文件大小的单位为M,1024M=1G,注意换算单位
簇大小页大小、字符集注意一定要写对,之后无法修改
口令要按照考试要求写,连不上数据库为零分!
考试时可以不勾选创建示例库
安装小结,可以查看前面的内容是否正确,可以返回去修改
点击完成后,出弹出一个窗口,需要执行以下三个脚本
命令一定要复制全,不然会报错
不要慌乱,将三个脚本都复制运行完,不然后面两个不执行,会一直卡在终端,直到创建实例超时
创建成功后,点完成,不要点继续,继续又回到创建实例的地方了
打开管理工具连接,考试也用管理工具
先测试连接是否成功,再点连接
进入到/home/dmdba/dmdbms/bin目录下,可以看到DmServiceDMSALMDB
dmdba账户启停:
./DmServiceDMSALMDB start ./DmServiceDMSALMDB staus ./DmServiceDMSALMDB stop
如果报错显示创建SOCKET连接失败:
原因:数据库故障,连错端口号或实例未启动
考试结束记得关闭实例:
# /home/dmdba/dmdbms/bin目录下
./DmServiceDMSALMDB stop
补充细节:
1、大小写敏感,达梦默认敏感,mysql、sql server使用不敏感。其他库迁移至达梦,与源库保持相同
2、行尾空格填充模式
‘a’ 'a 'oracle默认不一样,达梦默认一样
3、UTF-8一个中文占三个字符
GB18030 一个中文占两个字符,中文多的时候推荐,节省空间
4、dminit 命令行方式初始化实例
./dminit help 查看使用帮助
./dminit path=/dm/data db_name=** instance_name=** port_num=** SYSDBA_PWD=** SYSAUDITOP_PWD=** LOG_SIZE=** RLOG_POSTFIX_NAME(重做日志文件后缀名)=**
5、查看达梦进程/端口监听状态:
# 查看达梦进程运行状态
ps -ef|grep dmserver
# 查看端口监听状态
netstat -nt|grep 52*
支持使用JDBC、ODBC等各种驱动连接数据库
支持DM管理工具连接数据库,SQLark、disql
1、mount状态:开归档状态,设置参数;此时会打开.ctl控制文件,如果文件损坏,数据库起不来并且到不了mount状态
2、open状态:打开控制文件中的所有文件,如果所有文件都正常,直接进入open状态
3、挂起状态:中间状态,但既没有,集群才有
4、关闭状态:已经关闭
SQL下写:
SQL>alter database mount 处于普通配置状态
SQL>alter database open 处于普通打开状态
**物理存储:**由多个数据文件组成
一个表空间可以包括一个或多个数据库文件
一个数据文件只能归属于一个表空间
**逻辑存储结构:**由多个表空间组成,表空间由一个或多个数据文件组成
页(操作系统块)—>簇(不可以跨数据文件)—>段(可以跨数据文件)—>表空间(多个数据文件组成)—>数据库
作为逻辑容器,用于组织和管理数据库对象的物理存储
1、预定表空间
SYSTEM表空间、ROLL表空间、TEMP表空间、MAIN表空间,由数据库系统自动管理,SYSTEM表空间、ROLL表空间、TEMP表空间不允许脱机。
2、新建表空间
通过图形化界面创建
右键 新建表空间
添加数据文件,1个表空间最多有256个数据文件
写入数据文件的名字,根据考试要求添加数据文件个数,修改文件大小,是否打开自动扩充,扩充尺寸大小,扩充上限大小,注意单位为M,考试如果给G,记得换算单位,1G=1024M
在生产中,所有数据文件的属性最好保持一致
表空间能容纳的数据量为所有数据文件的上限值之和,最大为20G
对MAIN表空间进行脱机,无法查询到他下面的表,但并不影响访问其他的表空间
不影响对别的表的查询
查看表空间属性里有DDL语句,这是用命令行方式可以创建表空间
CACHE表示放入普通内存中
create tablespace TSAL datafile
'/home/dmdba/dmdbms/data/DMSALM/TSAL_02.DBF' size 512 autoextend on next 32 maxsize 10240, '/home/dmdba/dmdbms/data/DMSALM/TSAL_01.DBF' size 512 autoextend on next 32 maxsize 10240 CACHE = NOMAL;
用于确保事务的持久性和崩溃恢复。记录了已提交事务对数据库所做的所有更改。在系统故障后,能通过重做日志文件恢复数据到一致状态。
还有一种机制为归档日志,所有DDL、DML操作都会写入,它为永久性,直到磁盘撑满,需要定期清理
还可以备份,备份后的归档可以清理,备份可以每周末全量备份,每天增量备份
DDL、DML操作写入REDO日志(会覆盖之前),写入归档日志(需定期清理),备份
模式为特定对象的集合
在图形化中新建模式:
创建用户会自动生成同名的模式,如下图所示,创建U_DMSALM用户会自动生成U_DMSALM模式
一个模式只能属于一个用户,一个用户下可以有多个模式
如下图:我创建了DMSALM模式,可以将模式拥有者选择为U_DMSALM,U_DMSALM本身已有U_DMSALM模式,它目前拥有2个模式
在模式属性中可以看到模式名和模式拥有者
点开U_DMSALM模式查看属性,可以看到DDL语句,使用DDL语句创建模式与图形化创建方式的效果一致
CREATE SCHEMA DMSALM AUTHORIZATION "U_DMSALM";
一组权限的集合,用于简化权限管理;通过角色,批量回收和分配权限。
可以赋予角色权限、系统权限、对象权限。
grant授予权限 revoke取消权限
系统权限:控制数据库级操作,创建/删除表等DDL语句
对象权限:控制对特定对象的操作,SELECT、INSERT
点击角色右键新建角色,赋予角色系统权限:创建表、视图、存储过程、索引的权限
CREATE PROCEDURE/SEQUENCE/TRIGGER/SCHEMA/ROLE/SYNONYM/MATERIALIZED VIEW,分别为创建存储过程、创建序列、创建触发器、创建模式、创建角色、创建同义词、创建物化视图
常用资源设置项含义:
**口令有效期:**密码多少天后过期
**口令等待期:**密码修改后,多少天内不能再次修改
**口令宽限期:**密码过期后,用户在多少天内仍可登录
**口令变更次数:**密码必须修改过N次后,才能使用过去用过的旧密码
**口令锁定期:**登录失败达到上限后,账号会被锁定多少分钟
**非活跃用户锁定期:**用户连续多少天没有登录,账号被自动锁定
**登录失败次数:**连续登录失败多少次后,账号被锁定
例题:为用户创建默认的资源配置文件PRO_SALM,要求密码必须修改过 3 次后,才能使用过去用过的密码;并且如果用户超过90天未登录或是登录失败超过5次,则锁定该账号。
可以在用户这里统一修改资源限制,不用一个个修改,便于管理
命令行方式用disql登录时,当密码中带有@这个特殊字符时,登录失败该怎么办:
1、可以加上“ ”,比如可以写为"Dameng@123"
2、可以加上‘“ ”’,比如可以写为“‘Dameng@123’”;这里' '表示转义符
3、可以加上\“ \”,比如可以写为\“Dameng@123\”;这里\表示转义符
赋予用户创建表、视图、索引的权限
按用途分为:用户表(用户创建和维护)和系统表(Dm Server创建和维护,不能丢)
按类型分为:索引组织表、堆表、分区表、外部表、临时表,达梦默认索引组织表,orcale默认堆表
DCA考试需要会建表、导入SQL
数据类型是可表示的集。
字符类型:CHAR类型、CHARACTER类型(与CHAR相同,为了兼容性好)、VARCHAR类型(变长字符串,用多少分多少字节,用法类似CHAR,节省空间)、VRACHAR2类型(与VRACHAR类型)
数值类型:NUMERIC类型、DECIMAL类型、DEC类型(达梦常用)、NUMBER类型(这些数据类型相似)
# 在dmuser创建表t2,里面的数值精度为1,也就是小数位占1位,总长度为3位,整数位只能为1位
CREATE TABLE dmuser.t2(c1 dec(3,1));# 记得写;这样才是一个完整的SQL语句,而且为英文状态的;
# 得提交事务,不然会锁超时
commit;
位串数据类型、日期时间数据类型、大字段数据类型
在模式下或在用户下创建表
在某个模式下创建表,即按照题目要求的模式来创建表;
在某个用户下创建表,即在这个用户自动创建的模式下床建表;
在SQL语句中,不带模式名建表,默认建在SYSDBA下,因为当前在SYSDBA用户下。
如下图,在U_DMSALM模式下新建表
填写表名、列名、数据类型、精度、标度、是否为空、是否为主键、唯一性约束、外键约束
建好表后列的顺序是无法更改的,之后添加列会在最后添加,不会在中间插入
单行或多行插入数据均可以,也可以指定列插入数据,不指定列插入数据时,需要注意插入的个数与列的个数一致,否则会失败。
下面用DDL语句演示:
多行插入数据:
INSERT INTO DMSALM.EMP(EMPNO, ENAME, HIREDATE, COMM, DEPTNO) VALUES
('1001', '马学铭','2008-05-30',NULL,'101'),
('1002', '程擎武','2012-03-27',NULL,'101'),
('1003', '郑吉群','2010-12-27',NULL,'101'),
('2001', '李慧军','2010-05-15',NULL,'201'),
('2002', '常鹏程','2011-08-06',NULL,'201');
Commit;
修改数据:
UPDATE dmuser.t_userinfo SET email='hengxin@dameng.com',username = 'hengxin12' WHERE userid = 2;
删除数据:
# DELETE 删除数据时一定要带WHERE条件,不然会删除整张表
DELETE FROM dmuser.t_userinfo WHERE userid = 1;
图形化可直接操作,不过多演示,别忘记点保存。
当多表往里导入时,注意导入顺序,因为有外键,否则会失败。
可以用执行脚本的方式导入插入数据
点击执行脚本图标:
考试时的SQL脚本存放在/opt/soft目录下,具体视题目而定,直接点击里面的SQL执行即可
如果导入的数据导错了,怎么清空表,只保留表结构:
# 清空U_DMSALM模式下的SALARY表
TRUNCATE TABLE U_DMSALM.SALARY;
为了保证数据的完整性和一致性。分为:列级和表级。
常见的约束类型:
**主键约束:**唯一标识符、不能为空,会自动勾选非空,建主键时会自动有唯一索引
**外键约束:**跨表引用完整性、可以为空,一个表的外键一定是另一张表的主键,在导表的时候,有外键时先导外键的那张表,注意导入SQL顺序
**唯一约束:**字段值唯一、可以为空
**检查约束:**限制值范围或逻辑、可以为空
**默认值约束:**自动填充未指定值、可以为空
**非空约束:**禁止为NULL、不能为空
创建表的时候可以添加约束
结构化查询语言,关系型数据库的通用交互语言,集数据定义、操作、控制一体化工具
**DDL:**数据定义语言, 负责数据库对象(表、索引、视图等)的创建、修改、删除,CREATE/ALTER/DROP/COMMENT/TRUNCATE
# 将表结构连数据一起清掉
DROP TABLE T_USER;
# 只针对表,只清数据,表结构还在,速度很快,1~2秒可以清空
TRUNCATE TABLE T1;
**DML:**数据操作语言,负责增、删、改、查,INSERT/UPDATE/DELETE/MERGE,
# 可以带条件的删除数据,很慢,因为需要写redo日志,还要写undo,为了做回滚(ROLLBACK)
DELETE FROM table WHERE condition;
**DQL:**数据查询语言,SELECT
**DCL:**数据控制语言,权限管理,GRANT/REVOKE
**TCL:**事务控制语言,COMMIT/ROLLBACK/SAVEPOINT
1、SQL对关键字大小写不敏感
2、语句可以单行或多行书写,以分号结束
3、单行注释:-- 表示注释
多行注释:/*
多行注释
*/
数据库的数据存储在表中,表由行和列组成,列构成表结构,行组成表数据。
# 查询所有列
select*from dmhr.city;
#手动输入列名,列之间用逗号隔开
select city_id,city_name from dmhr.city;
# 使用表明限定列名,存在两张表都有相同字段,使用表明锁定需要的字段
select city.city_id,city.city_name from dmhr.city;
AS 指定别名
select t.employee,t.salary,t.salary+100 as newsal from dmhr.employee t;
distince 去重
select distinct department_id from dmhr.employee;
||连接符
select '员工:'||t.employee_name || '--薪资:'||t.salary as empinfo from dmhr.employee t;
算术运算符:
优先级,自左向右计算,有括号括号优先,* / 优先 + -,mod 取余
# 结果为1
select 100 mod 3;
过滤查询:
WHERE查询 注意引号要为英文,不要为中文
比较谓词(=/>/</>=/<=/<>)
逻辑操作符:AND(两个都为真,则返回TRUE)/OR(有一个为真,返回TRUE)/NOT(取反)
优先级:NOT>AND>OR
运算结果的返回值:TRNE / FALSE / NULL
比较操作符:=/>/</>=/<=/<>/BETWEEN...AND.../IN(set)/LIKE/IS NULL
IN(1,2) 找到1或2,返回TRUE
Like通配符
相当于做模糊匹配:%/_ %不限制字符, _代表一个字符
Like转义符
# 表示查找时将*后面的_当成普通字符查询,而不是通配符
SELECT ADDRESSID,ADDRESSS1,CITY,POSTAL
FROM PERISON.ADDRESS
WHERE ADDRESS1 LIKE '%C1*_501' ESCAPE '*';
.ROW进行Like查询
# 找到PRODUCT_REVIEW表中的列含有达梦的行
SELECT FROM PRODUCTION.PRODUCT_REVIEW WHERE PRODUCT_REVIEW.ROW LIKE'%达梦%';
连接查询为两张表或两张以上表之间的查询
**内连接:**JOIN ON 表示显示查询到的数据
**外连接:**LEFT/RIGHT/FULL JOIN ON 分别表示显示左边或右边或全部表的全部数据和条件查询到的数据
**多表连接:**多表连接更新、多表连接删除
使用GROUP BY 对数据进行分组和聚合,常用于统计分析和多维数据汇总。
在 GROUP BY 分组查询中,SELECT 后面出现的所有“非聚合列”,都必须出现在 GROUP BY 子句中。
在GROUP BY聚合后,用HAVING进行过滤,聚合前,用WHERE过滤
GROUP BY 后面不可以为两个变量的加减值,应直接跟变量值,ORDER BY可以,对这些不做要求。
order by 默认升序(asc),desc为降序排序
order by 2 desc
是嵌套在另一个SQL语句中的一个完整查询,为外层查询提供中间结果或过滤条件
数据排序ORDER BY,默认升序(ASC)排,降序为DESC
1、TOP子句
# 选择结果的前n条记录
TOP<n>
# 选择第m条记录之后的n条记录
TOP<m,n>
# 选择结果的前n%条记录
TOP<n>PERCENT
# 选择结果的前n%条记录,允许返回额外的行,也就是返回并列的行
TOP<n> PERCENT WITH TIES
2、LIMIT限定条件
# 与TOP含义基本相同
LIMIT N
LIMIT M,N
LIMIT N OFFSET M
DESC LIMIT M,N
类似于书籍的目录,一种数据库对象,通过指针加速查询速度,为有序序列。
索引与表相互独立,且占用存储空间。
聚簇索引(CLUSTER):一个表只有一个聚簇索引,不会在索引那栏显示出来
非聚簇索引(NOT PARTIAL):唯一/非唯一(普通二级索引)索引、函数索引、组合索引、全局索引和分区索引
自动创建索引:定义主键或唯一约束时,数据库会自动在相应列上创建唯一索引
手动创建索引:使用CREATE INDEX语句可以手动在指定列创建索引
失效/有效:默认为有效,无效的索引需要重建
可见/不可见:默认为可见,对执行计划可见;不可见的索引则执行计划不会选择该索引
视图是一种虚拟表,由视图名和查询语句组成。
不占用存储空间,数据来源于底层基表;
增强数据安全;简化查询。
基于单表的查询,不含聚合或复杂逻辑
包含多表连接、子查询、聚合函数(如 JOIN、SUM())
物化视图本质是预先计算并存储查询结果的物理表,并通过定期或实时刷新来保持与基表的数据同步。
包含物化视图表(MTAB开头)和物化视图,物化视图存储数据,系统在创建物化视图时,会自动创建物化视图和物化视图表。
提升复杂查询性能、降低实时计算开销、支持离线数据分析。
应用于数仓环境,相当于把数据查询好放入,下次直接调用
物化视图刷新:
增量刷新(FAST):根据表上数据更改记录增量刷新
完全刷新(COMPLETE):会删除表中所有记录,根据物化视图定义,重新生成物化视图数据
默认(FORCE):当快速刷新可用时用快速刷新,否则用完全刷新
刷新时机:
定时刷新:START WITH...NEXT,start with指定首次刷新时间,next指定自动刷新的间隔
手工刷新(默认):ON DEMAND,分为 REFRESH、DBMS_MVIEW
自动刷新:ON COMMIT,提交时自动刷新
从不刷新:NEVER REFRESH
创建物化视图的语法:
CREATE MATERIALIZED VIEW 模式名.物化视图名 build immediate refresh on demand force AS SQL;
动态性能视图是以 V$ 或 G$ 开头的视图,是数据库运行时生成的虚拟表,用于实时监控数据库实例的状态、性能和资源使用情况。
数据存储在内存中,由数据库实例动态更新。
# 系统中所有动态性能视图
SELECT * FROM v$dynamic_table;
#数据缓冲池,记录缓冲池页结构的信息
SELECT * FROM v$buffer;
#数据文件信息
SELECT * FROM v$datafile;
#sql缓冲区中执行计划
SELECT * FROM v$cachepln;
#会话信息
SELECT * FROM v$sessions;
#阻塞情况
SELECT * FROM v$trxwait;
基本语法:
CREATE VIEW 视图名 AS SQL;
视图依赖于基表,视图有效性可通过SF_VIEW_EXPIRED函数来检查
drop view if exists v_empnum;
序列是数据库中生成唯一、有序数字序列的对象,通常用于为表的主键列自动提供唯一值。
满足唯一性、有序性(递增或递减)、高效性
可以自动生成数值,无需手动插入。
CREATE SEQUENCE 模式名.序列名 INCREMENT BY 增量 START WITH 起始值 MAXVALUE 最大值 MINVALUE 最小值;
也可以直接在图形化工具中创建,更简洁。
同义词是数据库对象(模式、视图、表等)的别名
用来连接两个实例,相当于桥梁的作用
备份可以保障数据的持久性、可用性和业务连续性。
备份分为物理备份和逻辑备份。
物理备份可以整库恢复,联机和脱机都可以,脱机还原
逻辑备份只能联机备份。只保存DDL语句和数据,可以做比较细的备份。无法恢复数据文件。
逻辑导入导出工具:dexp/dimp,使用场景:数据库迁移、历史数据归档
将数据库中的对象结构和数据以逻辑格式(dmp文件)导出为文件,再通过导入工具将文件解析为数据库可执行命令,重建对象并插入数据。
四个级别:数据库级、用户级、模式级、表级,四种方式是互斥的
逻辑导出dexp
由关键字BEGIN开始,以关键字EXCEPTION或END结束。
可执行部分是核心部分,由SQL语句和流程控制语句构成。
1、支持的SQL语句包括:
数据查询语句(SELECT)
数据操纵语句(INSERT / DELETE / UPDATE)
游标定义及操纵语句(DECLARE CURSOR / OPEN / FETCH / CLOSE)
事务控制语句(COMMIT / ROLLBACK / SAVEPOINT)
动态SQL执行语句(EXECUTE IMMEDIATE)
流程控制语句(条件判断(IF THEN)、循环控制(LOOP))
自治事务(PRAGMA AUTONOMOUS_TRANSACTION)
执行部分也可以嵌套匿名块。
2、流程控制语句包括:
条件判断:
IF-THEN-ELSEIF-ELSE、CASE-WHEN、SWITCH
循环控制:
FOR-LOOP
DECLARE
a=10 int
BEGIN
FOR I IN REVERSE 1..a LOOP
PRINT I;
a:=I-1;
END LOOP;
END;
/
LOOP+EXIT WHEN、WHILE-LOOP、REPEAT-UNTIL、FORALL、CONTINUE
顺序控制:
GOTO、NULL
是一种预定义的错误控制机制,当程序遇到错误时,转向特定处理逻辑。使用户遇到错误时弹出的错误解释更清晰。
以EXCEPTION关键字开始,WHEN THEN子句用于处理未被显示捕获的异常.
异常处理语法:
DECLARE --声明部分 BEGIN --执行部分 EXCEPTION --异常处理部分开始 WHEN exception_name1 THEN --处理exception_name1的代码 WHEN exception_name2 THEN --处理exception_name2的代码 ... END;
创建存储过程的语法:
CREATE OR REPLACE PROCEDURE 模式名.存储过程名
(传入的参数名 参数类型 , 传入的参数名 参数类型,...)
AS / IS
BEGIN
代码块
[FOR I in REVERSE 1..a LOOP
PRINT I;
a:= I-1;
END LOOP;]
[异常处理部分]
END;
/
#调用存储过程
call 模式名.存储过程名(给a具体值);
CREATE OR REPLACE FUNCTION 模式名.存储过程名
(传入的参数名1 参数类型1 , 传入的参数名2 参数类型2,...)
RETURN 返回值类型(DEC()、VARCHAR)
AS
--变量声明
变量名1 变量类型1;
变量名2 变量类型2;
BEGIN
--代码块
[
SELECT 表名1.字段名1,表名2.字段名2,...
INTO 变量名1,变量名2, --将查询的结果分别存入变量中
FROM 模式名.表名
JOIN 模式名.表名 ON 主键和外键相同
WHERE 字段值1 = 传入的参数名1 AND 字段值2 = 传入的参数名2;
IF 返回需要满足的条件
RETURN 值;
ELSE
RETURN 值;
ENDIF;
--异常处理部分
EXCEPTION
WHEN OTHRES THEN
PRINT();
RETURN ...; --最好替换为:DBMS_OUTPUT.PUT_LINE();
]
END;
/
#调用函数
select 模式名.存储过程名(输入参数值,输入参数值,...);
在dmdba用户下执行:
# 切换到目录下查看setup.py文件
cd /dm/dmdbms/drivers/python/dmPython
ll
# 编写python脚本
vim setup.py
python3 setup.py
文章
阅读量
获赞
