Oracle 问题笔记(持续更新…)
※※※※※※※※※※※※※※DBの列名を検索※※※※※※※※※※※※※※
select * from user_col_comments where comments like '%%'
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
1.oralce SQL文太长,太大导致内存不够问题(内存管理PGA)ora-04036
C:\Users\Administrator>sqlplus user/password@192.xxx.x.xxx/service
SQL*Plus: Release 11.1.0.6.0 - Production on 月 11月 27 14:22:44 2023
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
に接続されました。
SQL> show parameter PGA;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
pga_aggregate_limit big integer
5850M
pga_aggregate_target big integer
1604M
SQL> alter system set pga_aggregate_target= 2604M;
システムが変更されました。
SQL> show parameter PGA;
NAME TYPE
------------------------------------ ----------------------
VALUE
------------------------------
pga_aggregate_limit big integer
5850M
pga_aggregate_target big integer
2604M
SQL> alter system set pga_aggregate_target= 3604M;
システムが変更されました。
2.PSQL insert后立刻查询插入数据数量
N_OUTPUT2_CNT:=N_OUTPUT2_CNT + SQL%ROWCOUNT;
3.金額項目1桁間隔編集について(plsql)
例:123456→1 2 3 4 5 6
-----------------------------------------------
declare
iNUM NVARCHAR2(10):='123456';
nLEN NUMBER;
o_RESULT NVARCHAR2(100);
c_SUPESU CONSTANT NVARCHAR2(1) := ' ';
begin
--初期化
o_RESULT := NULL;
--編集開始
nLEN := LENGTH(TRIM(iNUM));
FOR iDX IN 1 .. nLEN LOOP
o_RESULT := o_RESULT || c_SUPESU || SUBSTR(iNUM,iDX,1);
END LOOP;
--20桁にするよう
o_RESULT := LPAD(o_RESULT, '20', c_SUPESU);
end;
4.oralce 行列转换
结果:
5.SQLMerge Into
MERGE INTO merge_target target
USING (SELECT B.name, B.age, B.target_id from merge_source B) source
ON (target.id = source.target_id)
--有重复数据的时候:更新
WHEN MATCHED THEN
UPDATE
SET target.name = source.name,
target.age = source.age
--没有重复数据的时候:追加
WHEN NOT MATCHED THEN
INSERT (target.name, target.age) VALUES (source.name, source.age);
declare
-- Local variables here
i integer;
begin
-- Test statements here
EXECUTE IMMEDIATE 'TRUNCATE TABLE KMT_DBM_SEIGOSEI_JA_NEW';
end;
6.DBMS_SQL
DECLARE
v_cursor NUMBER;
v_stat NUMBER;
v_row NUMBER;
v_id NUMBER;
v_no VARCHAR(100);
v_date DATE;
v_sql VARCHAR(200);
s_id NUMBER;
s_date DATE;
BEGIN
s_id := 3000;
s_date := SYSDATE;
v_sql := 'SELECT id,qan_no,sample_date FROM "tblno" WHERE id > :sid and sample_date < :sdate';
v_cursor := dbms_sql.open_cursor; --打开游标;
dbms_sql.parse(v_cursor, v_sql, dbms_sql.native); --解析动态SQL语句;
dbms_sql.bind_variable(v_cursor, ':sid', s_id); --绑定输入参数;
dbms_sql.bind_variable(v_cursor, ':sdate', s_date);
dbms_sql.define_column(v_cursor, 1, v_id); --定义列
dbms_sql.define_column(v_cursor, 2, v_no, 100);
dbms_sql.define_column(v_cursor, 3, v_date);
v_stat := dbms_sql.execute(v_cursor); --执行动态SQL语句。
LOOP
EXIT WHEN dbms_sql.fetch_rows(v_cursor) <=0; --fetch_rows在结果集中移动游标,如果未抵达末尾,返回1。
dbms_sql.column_value(v_cursor, 1, v_id); --将当前行的查询结果写入上面定义的列中。
dbms_sql.column_value(v_cursor, 2, v_no);
dbms_sql.column_value(v_cursor, 3, v_date);
dbms_output.put_line(v_id || ';' || v_no || ';' || v_date);
--WK表INSERT
nNo := nNo + 1;
rWK_table.No := nNo;
rWK_table.No := v_id;
rWK_table.No := v_no;
rWK_table.No := v_date;
insert insert into rWK_table values rWK_table;
END LOOP;
dbms_sql.close_cursor(v_cursor); --关闭游标。
END;