IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> PL/SQL语法之有名块语法(二)-- 数据字典、动态SQL、注释、闪回 -> 正文阅读

[大数据]PL/SQL语法之有名块语法(二)-- 数据字典、动态SQL、注释、闪回

一、数据字典(视图)

静态:USER_*? ??存储了当前用户所拥有的对象的信息。
? ? ? ?????ALL_*? ? ? ? 存储了当前用户可以访问的所有的对象信息,不一定是自己的 。
? ? ? ? ? ?DBA_*? ? ? ?存储了数据库所有的对象信息,具有管理员(DBA)权限才可以访问 。

动态:V$? ? ?当前.....? ?需要DBA权限

USER_TABLES 所有的表
    _VIEWS  所有的视图
    _SEQUENCES 所有的序列 
    _INDEX   所有的索引
    _CONSTRAINTS  所有的约束 
    _RECYCLEBIN 回收站 
SELECT * FROM USER_TABLES;

V$SESSION 当前有谁连接数据库 
会话:一个用户从登录到退出 
terminal 主机名 
SELECT DISTINCT TERMINAL FROM v$SESSION;

二、动态SQL语句--一般用于DDL语句的批量执行语句

1、语法:EXECUTE IMMEDIATE '执行的语句'[USING|INTO]?

????????using ?给动态语句传值?
????????into ? 从动态语句中取值

? ? ? ? 注:没加 AUTHID CURRENT_USER 表示定义者权限 以定义者身份执行?
????????????????加上 AUTHID CURRENT_USER 表示调用者权限 以调用者身份执行

--创建一个存过 批量建表
CREATE OR REPLACE PROCEDURE PRO_C(V_E VARCHAR2,V1 NUMBER,V2 NUMBER) 
AUTHID CURRENT_USER IS
BEGIN 
  FOR I IN V1..V2 
    LOOP
      EXECUTE IMMEDIATE 'CREATE TABLE '||V_E||'_'||I||' AS SELECT * FROM EMP';
                                                    --注意留空格 
    END LOOP;
END;

CALL PRO_C('EMP',50,100);    --存过加了 AUTHID CURRENT_USER 才能在这里调用
--批量创建emp_1~100 
--像emp_1~100中插入一条数据  打印第一条数据
--如果同时使用into和using  那么要先into 再using 
CALL PRO_C('EMP',1,100);   调用上面的存过建表

CREATE OR REPLACE PROCEDURE PRO_10(V1 NUMBER,V2 NUMBER,V3 NUMBER)
AUTHID CURRENT_USER IS  
V_E EMP%ROWTYPE;
BEGIN 
  FOR I IN 1..100 
    LOOP
      EXECUTE IMMEDIATE 'TRUNCATE TABLE EMP_'||I;
      EXECUTE IMMEDIATE 'INSERT INTO EMP_'||I||'(EMPNO,SAL,DEPTNO)
                          VALUES(:1,:2,:3)' USING V1,V2,V3; 
                          --给动态语句传值
      EXECUTE IMMEDIATE 'SELECT * FROM EMP_'||I||' WHERE ROWNUM=1'
                         INTO V_E; --从动态语句取值 
     DBMS_OUTPUT.put_line('EMP_'||I||'中的第一条数据是'||V_E.EMPNO
                           ||' '||V_E.SAL||' '||V_E.DEPTNO);
    END LOOP;
END;

CALL PRO_10(1234,6000,50);
--如何使用数据字典删除emp_开头的表 
SELECT 'DROP TABLE '||TABLE_NAME||' PURGE' FROM USER_TABLES
WHERE TABLE_NAME LIKE'EMP\_%' ESCAPE'\';

CREATE OR REPLACE PROCEDURE PRO_DD AUTHID CURRENT_USER IS
CUR_1 SYS_REFCURSOR;
V_E VARCHAR2(200);
BEGIN 
  OPEN CUR_1 FOR SELECT 'DROP TABLE '||TABLE_NAME||' PURGE' FROM USER_TABLES
                 WHERE TABLE_NAME LIKE'EMP\_%' ESCAPE'\'; 
  LOOP
    FETCH CUR_1 INTO V_E;
    EXIT WHEN CUR_1%NOTFOUND;
    EXECUTE IMMEDIATE V_E;
  END LOOP;
 CLOSE CUR_1;
END; 

CALL PRO_DD();

三、添加注释

COMMENT ON TABLE 表名 IS 表注释
COMMENT ON COLUMN 表.列 IS 列注释 

COMMENT ON TABLE EMP IS '这是一个员工信息表';
COMMENT ON COLUMN EMP.ENAME IS '这是员工的姓名';

四、闪回

1、闪回表? ?

FLASHBACK TABLE 表名 TO BEFORE DROP [RENAME TO 新表名]

2、闪回到DML之前的状态?

? ? ? 需要前提是表必须开启了行移动?

开启:ALTER TABLE 表名 ENABLE ROW MOVEMENT;
关闭:ALTER TABLE 表名 DISENABLEROW MOVEMENT;

?闪回详解:Oracle 闪回技术详解(flashback)_越努力越幸运再努力的博客-CSDN博客_oracle 闪回

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:12:48  更:2022-08-19 19:16:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:18:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码