暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle Database常用命令集

275

1.    Oracle 查看数据库字符集和客户端字符集 SQL 语句

        查询数据库字符集:

        select * from nls_database_parameters t where t.parameter in ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');

        查询客户端字符集:

        SELECT USERENV('language') FROM DUAL;


2.    查看log和logfile大小

        SELECT GROUP#,members,BYTES / 1024 / 1024 AS "SIZE M",STATUS,ARCHIVED FROM v$log;

        SELECT * from v$logfile;

        col member for a45 

        select group#, status, type, member from v$logfile;

        SELECT GROUP#,  members, BYTES/1024/1024 AS "SIZE M",  STATUS,  ARCHIVED  FROM  v$log;


3.    数据库查看版本

        set linesize 100

        col CON_ID for a45

        col BANNER for a100

        select * from v$version;       


查看安装了哪些选项
 col PARAMETER format a60
 col VALUE format a10
 select * from sys.v_$option;


4.    数据库勒索病毒查询

select * from dba_objects where object_name like '%DBMS_SUPPORT_INTERNAL%';   

select * from dba_objects where object_name like '%DBMS_ SYSTEM_INTERNAL %';

select * from dba_objects where object_name like '%DBMS_ CORE_INTERNAL%';

select * from dba_objects where object_name like '%DBMS_STANDARD_FUN9%';

select * from dba_objects where object_name like '%DBMS_SUPPORT_INTERNAL%';

select * from dba_objects where object_name like '%DBMS_ SYSTEM_INTERNAL%';

select * from dba_objects where object_name like '%DBMS_ CORE_INTERNAL%';

查看输出是否含有上面7个名称,下条命令相同

select * from dba_objects where object_name like '%INTERNAL%';   


select 'DROP TRIGGER '||owner||'."'||TRIGGER_NAME||'";' from dba_triggers where TRIGGER_NAME like  'DBMS_%_INTERNAL%' union all select 'DROP PROCEDURE '||owner||'."'||a.object_name||'";' from dba_procedures a where a.object_name like 'DBMS_%_INTERNAL% '; 

正常没输出结果。


5.    数据闪回

        备份数据

        create table au_user_bak as select * from au_user;

        启动行移动
        alter table au_user enable row movement;
        恢复数据
        flashback table au_user to timestamp to_timestamp('2024-01-09 11:00:00', 'YYYY-MM-DD HH24:MI:SS');

        关闭行移动

        alter table au_user disable row movement;


6.    使用logminer查看归档日志

@?/rdbms/admin/dbmslm.sql;
@?/rdbms/admin/dbmslmd.sql;


exec sys.dbms_logmnr.add_logfile(logfilename => '/dbfile/archivelog/1_607438_963928319.arc',options => dbms_logmnr.new);
exec sys.dbms_logmnr.start_logmnr(options => sys.dbms_logmnr.dict_from_online_catalog);


select seg_owner,count(*) from v$logmnr_contents group by seg_owner;

select count(1),substr(sql_redo,1,60) from v$logmnr_contents group by substr(sql_redo,1,60) order by count(1) desc ;


增加日志

exec sys.dbms_logmnr.add_logfile(logfilename=>'/dbfile/archivelog/1_607439_963928319.arc');


create table logmnr_tab as select * from V$LOGMNR_CONTENTS;


查看日志分析结果,说明:日志分析结果只能在当前会话查看。

显示DML分析结果
select operation,sql_redo,sql_undo from v$logmnr_contents where seg_name='TEMP';

显示DDL分析结果
select to_cahr(timestamp,'yyyy-mm-dd hh23:mi:ss') time,sql_redo from v$logmnr_contents where sql_redo like '%create%' or sql_redo like '%create%';

显示在用字典文件
select db_name,filename from v$logmnr_dictionary;

结束LogMiner
execute dbms_logmnr.end_logmnr;


7.    APEX测试Windows AD

# ldapsearch -x -H ldap://192.168.164.2 -D "CN=weishi,CN=Users,DC=wagne,DC=com" -w 1qaz@WSX -b "DC=wagne,DC=com"


8.    --更新terry该GP用戶信息

update TIAN_GSDSN
set MONTH='2024.1',
zxdate = to_date('2012/06/19','YYYY/MM/DD'), --日期格式化
zxuser = DEFAULT --用DEFAULT提供的默认值
where zx01 = 'terry';

desc TIAN_GSDSN

update TIAN_GSDSN set MONTH='2024.1'

delete TIAN_GSDSN where 序号 is NULL and 合同号 is NULL and 物料号 is NULL


select count(*) from TIAN_GSDSN_CP

select * from TIAN_GSDSN where 序号 is NULL


9.    Oracle PLSQL


DDL数据库定义语言

CREATE TABLE/VIEW/INDEX/...

DROP    TABLE/VIEW/INDEX/...

ALTER    TABLE/VIEW/INDEX/...


DQL数据库查询语言

SELECT        FROM        ;.


DML数据库操作语言

INSERT INTO ...

DELETE

UPDATE


PLSQL块编程

declare    (可选)

    变量定义    (可选)

    光标定义    (可选)

begin

        程序体    (必须要有)

    exception     (可选)

        例外处理     (可选)

end;


PLSQL块编程-例子

declare
L_HTH varchar2(50);
begin
select 合同号
into L_HTH
from TRANS_PZQD
where 箱号 = '280583863';
dbms_output.put_line(L_HTH);
exception
when no_data_found then
dbms_output.put_line('Error 合同号, cannot found the record.');
end;


PLSQL存储过程procedure-示例处理数据

create or replace procedure update_emp 

    (p_emp_no in number,

     p_emp_name     in varchar2,

     p_emp_salary in number) 

is

    v_memo varchar(240);

begin

    v_memo := p_emp_no ||'_'|| p_emp_name;

    update employee set emp_name = p_emp_name where emp_no=p_emp_no;

    update employee set emp_salary = p_emp_salary where emp_no=p_emp_no;

    update employee set emp_memo = v_memo where emp_no=p_emp_no;

exception

    log('Error on update:' || to_char(p_emp_no));

end;


PLSQL存储过程procedure-返回多个值

create or replace procedure update_emp 

    (p_emp_no in number,

     p_emp_name out varchar2,

     p_emp_salary out number) 

is

    cursor c_emp is

        select emp_name,emp_salary

            from employee

        where emp_no = p_emp_no;

begin

    open c_emp;

    fetch c_emp into p_emp_name, p_emp_salary;

    close c_emp;

exception

    log('Error on read employee:' || to_char(p_emp_no));

end;


PLSQL函数Function-示例

create or replace function read_emp _name

    (p_emp_no in number)

return varchar2 

is

    v_emp_name vachar2;

    cursor c_emp_name is

        select emp_name

            from employee

        where emp_no = p_emp_no;

begin

    open c_emp_name;

    fetch c_emp_name into v_emp_name;

    close c_emp_name;

exception

    log('Error on read employee:' || to_char(p_emp_no));

    return null;

end;


包package-示例-规范

保存名:pk_emp.pks

create or replace  package pck_emp as

    function read_emp_name (p_emp_no in number)

        return varchar2;

    procedure update-emp    

        (p_emp_no in number,

         p_emp_name in varchar2,

         p_emp_salary in numer);

end;

/


包 package - 示例-包体
保存为:pck_emp.pkb
create or replace package body pck_emp as 

    function read_emp_name ( p_emp_no in number)
        return varchar2 is
    v_emp_name varchar2;
    cursor c_emp_name is 

        select emp_name 

            from employee
           where emp_no = p_emp_no;
begin
    open c_emp_name;
    fetch c_emp_name into v_emp_name;
    close c_emp_name;
    return v_emp_name;
exception
    log('Error on read employee:' || to_char(p_emp_no);
    return null;
end;

procedure update_emp (p_emp_no in number,
                                        p_emp_name in varchar2
                                        p_emp_salary in number) 

is
    v_memo varchar(240);
begin
    v_memo := p_emp_no ||'_'I|p_emp_name;
    update employee set emp_name = p_emp_name where emp_no=p_emp_no;
    update employee set emp_salary = p_emp_salary where emp_no=p_emp_no;
    update employee set emp_memo = v_memo where emp_no =p_emp_no;
exception
    log ('Error on update:' || to_char(p_emp_no);
end;


end;


变量
    建议以v_-开头
    number; number(12,2), varchar2(20); date;boolean
    放在begin前
    可以定义时同时赋值:v_date date := sysdate;
    可以是%type
        v_emp_name    employee.emp_name%type;


decare

    v_num number;

    v_amount number(12,2) :=0.00;

    v_date date;

    v_flag booleam ;=true;

begin


游标进阶
1) c_emp%found:(如果找到值,就为true)
2) c_emp%notfound:(如果找不到值,就为true)
3) c_emp%rowcount:(返回游标缓冲的记录数)
4) c_emp%isopen:(判断右边是否打开着)
        True 是打开着的

        False 是关闭的
1) cursor c_emp (p_emp_no in number) 

    is 

        select emp_name ,emp_salary
             from employee
        where emp_no = p_emp_no,


2) v_emp_no number:=1;
begin
    open c_emp (v_emp_no);
    fetch c_emp into p_emp_name,p_emp_salary;
    close c_emp
end;


控制结构-如果1
1)if 条件 then
           执行语句;
       end if ;
2)  if v_emp_level <100 then 

        emp_salary := emp_salary *110% ;
     end if;
3)最简单的if 语句
4)if 语句在程序段内执行
     begin 

     end;


控制结构-如果2
1) if 条件 then
           执行源句1;
      else
            执行语句2
      end if ;
2) if V_emp_level <100 then 

            emp_salary := emp_salary *110% ;
    else
            emp_salary := emp_salary *120% ;
    end if;
3) if 语句在程序段内执行
    begin 

    end;


控制结构 - 如果3
1) if 条件1 then
           执行语句1;
      elsif 条件2 then
            执行语句2;
      elsif ... then
            执行语句…
      end if ;
2) if v_emp_level <100 then 

                emp_salary := emp_salary *110% ; 

        elsif v_emp_level <200 then 

                emp_salary := emp_salary *120% ; 

        elsif v_emp_level <300 then 

                emp_salary := emp_salary *130% ; 

        elsif v_emp_level <400 then 

                emp_salary := emp_salary *140% ;
        else
                emp_salary := emp_salary *150% ;
        end if;
3) if 语句在程序段内执行
        begin 

        end;


控制结构 -循环oop

1)loop
执行语句;
exit when条件;
end loop ;
2)至少执行一次
3 ) 注意死循环(exit 的条件一定能成立)
declare

V_emp_name varchar2(240);

cursor c_emp is

select emp_name
    from employee;

begin
open c_emp;

loop;
    fetch c_emp into v_emp_name;
    exit when c_emp%notfound;
    dbms_outpu.put_line(v_emp_name);
end loop;
close c_emp;
end;


九、控制结构- 循环for
1) for 变量 in reserve 开始..结束 loop
        执行语句;
      end loop ;
2)变量在开始和结束之间就执行
declare
    v_i number;
begin
    for v_i in reserve 1..100 loop 

        insert into employee (emp_no, emp_name, emp_salary) values (v_i,to_char(v_i),v_i *1000);
    end loop;
end;
3) 游标在for中使用
    for 变量 in 游标 loop
        变量操作;
    end loop;
declare
    cursor c_emp is
        select emp_name from employee;
    begin
        for v_emp in c_emp loop;
            dbms_outpu.put_line(v_emp.emp_name);
        end loop;
end;


控制结构 - 循环 while

1) while 条件 loop
        执行语句;
      end loop :
2)可能一次也执行不了
3) 注意死循环
(While条件一定要有不符合的时候)
declare
    v_i number;
begin
    v_i := 1; 

    while v_i<=100 loop 

        insert into employee (emp_no, emp_name, emp_salary) values (v_i,to_char(v_i), v_i *1000);
        v_i := v_i +1; 

    end loop;
end;




Oracle APEX笔记


declare

V_TIAN_XH varchar2(100);

cursor c_xh is
select distinct 箱号 from TIAN_XH;

begin
open c_xh;
loop
fetch c_xh into V_TIAN_XH;
exit when c_xh%notfound;
dbms_output.put_line(V_TIAN_XH);
end loop;
close c_xh;
end;


Oracle APEX页面分页打印,在html语言中加入分页符。

DECLARE
V_TIAN_XH varchar2(100);
V_TIAN_wl varchar2(100);
V_TIAN_mc varchar2(100);
V_TIAN_inner_xh varchar2(100);
cursor c_xh is
select distinct 箱号 from TIAN_XH;

BEGIN
OPEN c_xh;
LOOP
fetch c_xh into V_TIAN_XH;
exit when c_xh%notfound;
dbms_output.put_line(V_TIAN_XH);
Htp.p('
<p>
<p class="MsoNormal" align="right" style="text-align:right;">
'||V_TIAN_XH||'<span>       </span>
<div style="page-break-after:always"></div>
</p>
</p>
');


最后修改时间:2024-02-18 09:36:41
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论