Oracle 问题笔记

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 月 1127 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)

例:1234561 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;

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

篮球小童_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值