PB
- Dec{2}: 小数后两位
- Dec(String): String类型转为Dec类型
- dw_1.selectrow(0,false):不选中任何行,取消之前所作的选择
- dw_1.selectrow(row,true):选择当前行
- 回车跳下一个输入框
if keydown(keyEnter!) then
sle_1.setfocus
end if
- String s1 = space(30):定义30个空格
- Fill(‘0’,12):用12个0填充
- Mid(String,1,4):从1开始截取四位string
- dw_1.retrieve(参数1.):有参查询,返回查出的行数,参数顺序与数据窗口必须对应
- nvl(e1,e2):如果e1为null,返回e2;不为null 返回e1
- 文件导出
GetFileSaveName("输出文件名","文件路径",返回的文件名,扩展文件名,可供选择的文件名)
- 文件导入
GetFileOpenName()
- 过滤
downtrol.setfilter(String format)
downtrol:设定过滤规则的DataWindow,DataStore或下拉数据窗口控件名称
format:过滤规则表达式
oracle
- DESC IF_BALANCEHEAD:查询数据库表字段
- 获取年龄
select TRUNC((to_char(sysdate, 'yyyyMMdd') - to_char(birth, 'yyyyMMdd')) / 10000)
SELECT TRUNC(months_between(sysdate, birth)/12) AS agefrom mytable
取得年份:Select Extract(year from sysdate) from dual,
取得月份select extract (month from sysdate) from dual
取得日select extract (day from sysdate) from dual
- 主要表
----住院
select * from if_balancehead --住院头表收费
select * from if_feeitemlist --住院非药品收费
select * from if_feeitemlist a ,his_compare b where a.oper_code = b.oper_code
select * from if_medicinelist--住院药品收费
select * from his_compare /*医保收费项目、医院收费项目*/
select * from ii_inmaininfo /*住院病人基本信息*/
select * from if_balancelist
select b.* from ia_feestatnexus b, if_balancelist a where b.report_code='ZY01' and a.fee_code = b.fee_stat_cate; /*住院费用类型*/
select b.* from ia_feestatnexus b, if_balancelist a where b.report_code='MZ01' and a.fee_code = b.fee_stat_cate; /*门诊费用类型*/
SELECT * FROM II_YBDIAGNOSE
select card_no,icd_code,diag_name from II_YBDIAGNOSE where DIAG_KIND = 1 /*入院诊断*/
select card_no,icd_code,diag_name from II_YBDIAGNOSE where DIAG_KIND = 3 /*出院诊断*/
----门诊
select * from clinic_invoice_info;/* 门诊结算头表*/
select * from clinic_invoice_detail;/*发票明细表(费用分类表)*/
select * from clinic_invoice_pay;/*收费信息表*/
select * from r_register --挂号
select * from undrug_detail--门诊非药品收费
select * from drug_detail--门诊药品收费
SELECT * FROM UNDRUG_ZT /*非药品组套*/
SELECT * FROM UNDRUG_INFO/*非药品信息维护*/
- oracle 排序:NULLS FIRST在非NULL值之前放置NULL值,NULLS LAST在非NULL值之后放置NULL值
- FETCH 子句在 Oracle 中可以用来限制查询返回的行数
[ OFFSET offset ROWS]
FETCH NEXT [ row_count | percent PERCENT ] ROWS [ ONLY | WITH TIES ]
OFFSET 子句指定在行限制开始之前要跳过行数。OFFSET 子句是可选的。 如果跳过它,则偏移量为 0,行限制从第一行开始计算。
偏移量必须是一个数字或一个表达式,其值为一个数字。偏移量遵守以下规则:
如果偏移量是负值,则将其视为 0。
如果偏移量为 NULL 或大于查询返回的行数,则不返回任何行。
如果偏移量包含一个分数,则分数部分被截断。
FETCH 子句指定要返回的行数或百分比。
为了语义清晰的目的,您可以使用关键字 ROW 而不是 ROWS,FIRST 而不是 NEXT。 例如,以下子句的行为和产生的结果相同:
FETCH NEXT 1 ROWS
FETCH FIRST 1 ROW
ONLY | WITH TIES 选项
仅返回 FETCH NEXT (或 FIRST) 后的行数或行数的百分比。
WITH TIES 返回与最后一行相同的排序键。请注意,如果使用 WITH TIES,则必须在查询中指定一个 ORDER BY 子句。如果不这样做,查询将不会返回额外的行。
- order_date BETWEEN DATE '2016-12-01' AND DATE '2016-12-31'
要执行不区分大小写的匹配,可以使用 LOWER() 或 UPPER() 函数
UPPER( last_name ) LIKE 'ST%'
LOWER(last_name LIKE 'st%'
oracel 事务
- 1.commit
COMMIT [ WORK ] [ COMMENT clause ] [ WRITE clause ] [ FORCE clause ]
- 参数
- WORK:可选的。它被 Oracle 添加为符合 SQL 标准。使用或不使用 WORK 参数来执行 COMMIT 将产生相同的结果。
- COMMENT clause:可选的。 它用于指定与当前事务关联的注释。 该注释最多可以包含在单引号中的 255 个字节的文本中。 如果出现问题,它将与事务ID一起存储在名为 DBA_2PC_PENDING 的系统视图中。
- WRITE clause:可选的。 它用于指定将已提交事务的重做信息写入重做日志的优先级。 用这个子句,有两个参数可以指定:
- WAIT 或 NOWAIT (如果省略,WAIT是默认值)
- IMMEDIATE 或 BATCH(IMMEDIATE是省略时的默认值)
- FORCE clause:可选的。 它用于强制提交可能已损坏或有疑问的事务。 有了这个子句,可以用3种方式指定FORCE:
FORCE'string',[integer]或FORCE CORRUPT_XID'string' 或 FORCE CORRUPT_XID_ALL
- 注意
必须拥有 DBA 权限才能访问系统视图 - DBA_2PC_PENDING和V$CORRUPT_XID_LIST。
必须拥有 DBA 权限才能指定COMMIT语句的某些功能。
// 添加备注
COMMIT COMMENT 'This is the comment for the transaction'
// 强制
COMMIT FORCE '22.14.67'
- 2.rollback
ROLLBACK [ WORK ] [ TO [SAVEPOINT] savepoint_name | FORCE 'string' ]
- 参数
- WORK:可选的。 它被 Oracle 添加为符合 SQL 标准。 使用或不使用 WORK 参数来发出 ROLLBACK 会导致相同的结果。
- TO SAVEPOINT savepoint_name:可选的。 ROLLBACK语句撤消当前会话的所有更改,直到由 savepoint_name 指定的保存点。 如果省略该子句,则所有更改都将被撤消。
- FORCE ‘string’:可选的。它用于强制回滚可能已损坏或有问题的事务。 使用此子句,可以将单引号中的事务ID指定为字符串。 可以在系统视图中找到名为 DBA_2PC_PENDING 的事务标识。
- 必须拥有 DBA 权限才能访问系统视图:DBA_2PC_PENDING 和 V$CORRUPT_XID_LIST。
- 您无法将有问题的事务回滚到保存点。
// 写入保存点
ROLLBACK TO SAVEPOINT savepoint1
// 强制回滚
ROLLBACK FORCE '22.14.67';
- 3.SET TRANSACTION语句(设置事务)
SET TRANSACTION [ READ ONLY | READ WRITE ]
[ ISOLATION LEVEL [ SERIALIZE | READ COMMITED ]
[ USE ROLLBACK SEGMENT 'segment_name' ]
[ NAME 'transaction_name' ];
READ ONLY:可以将事务设置为只读事务。
● READ WRITE:可以将事务设置为读/写事务。
● ISOLATION LEVEL: 如果指定,它有两个选项:
1.ISOLATION LEVEL SERIALIZE:如果事务尝试更新由另一个事务更新并未提交的资源,则事务将失败。
2.ISOLATION LEVEL READ COMMITTED:如果事务需要另一个事务持有的行锁,则事务将等待,直到行锁被释放。
● USE ROLLBACK SEGMENT:可选的。 如果指定,它将事务分配给由 'segment_name' 标识的回退段,该段是用引号括起来的段名称。
● NAME:为 'transaction_name' 标识的事务分配一个名称,该事务用引号括起来。
// 只读
SET TRANSACTION READ ONLY NAME 'RO_example'
// 读写
SET TRANSACTION READ WRITE NAME 'RW_example'
- use rollback segment 实例
一般在做报表查询的时候,可以先设置该查询事务为一个只读事务,以避免出现写操作。
DECLARE
l_name VARCHAR2(100);
l_age NUMBER;
l_sex VARCHAR2(2);
BEGIN
-- 为保证set transaction是事务的第一条语句,先使用commit或rollback来结束掉前面可能存在的事务
COMMIT;
-- 使用name给事务命名
SET TRANSACTION READ ONLY NAME '查询报表';
SELECT NAME
INTO l_name
FROM student
WHERE student_id = 1001;
SELECT age
INTO l_age
FROM student
WHERE student_id = 1001;
SELECT sex
INTO l_sex
FROM student
WHERE student_id = 1001;
-- 终止只读事务
COMMIT;
dbms_output.put_line('输出:' || l_name || l_age || l_sex);
END;
- LOCK TABLE语句(锁表)
LOCK TABLE tables IN lock_mode MODE [ WAIT [, integer] | NOWAIT ];
- 参数
- tables:用逗号分隔的表格列表。
- lock_mode:它是以下值之一:
lock_mode 描述
ROW SHARE 允许同时访问表,但阻止用户锁定整个表以进行独占访问。
ROW EXCLUSIVE 允许对表进行并发访问,但阻止用户以独占访问方式锁定整个表并以共享方式锁定表。
SHARE UPDATE 允许同时访问表,但阻止用户锁定整个表以进行独占访问。
SHARE 允许并发查询,但用户无法更新锁定的表。
SHARE ROW EXCLUSIVE 用户可以查看表中的记录,但是无法更新表或锁定SHARE表中的表。
EXCLUSIVE 允许查询锁定的表格,但不能进行其他活动。 - WAIT:它指定数据库将等待(达到指定整数的特定秒数)以获取 DML 锁定。
- NOWAIT:它指定数据库不应该等待释放锁。
这个例子会锁定 suppliers 表在共享模式,而不是等待锁定被释放
LOCK TABLE suppliers IN SHARE MODE NOWAIT;