写了个存储过程获得table的完整定义(转载)

【PostgreSQL】PostgreSQL函数-得到表的建表语句、得到整个schema的ddl语句 【代码】【PostgreSQL】PostgreSQL函数-得到表的建表语句、得到整个schema的ddl语句 阅读详情

包括create table, comment, index, trigger, object grant.不知道还缺啥?

我放在了自己常用的一个package里(dbms_ut 包,包括常用脚本)。

过程如下:

    PROCEDURE get_table_ddl(
        p_table_name IN VARCHAR2,
        p_owner IN VARCHAR2 DEFAULT USER,
        p_storage IN BOOLEAN DEFAULT TRUE,
        p_segment_attributes IN BOOLEAN DEFAULT TRUE,
        p_ref_constraints IN BOOLEAN DEFAULT FALSE,
        p_constraints_as_alter IN BOOLEAN DEFAULT FALSE
    )
    IS
        v_temp VARCHAR2(1024) := '';
        v_table_ddl CLOB := '';
        v_comment_ddl CLOB := '';
        v_constraint_ddl CLOB := '';
        v_ref_constraint_ddl CLOB := '';
        v_index_ddl CLOB := '';
        v_trigger_ddl CLOB := '';
        v_object_grant_ddl CLOB := '';
    BEGIN
        --输出信息采用缩排或换行格式化
        DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'PRETTY', FALSE);
        --确保每个语句都带分号
        DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SQLTERMINATOR', TRUE);
        DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'TABLESPACE', TRUE);
        DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS', TRUE);
        DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'REF_CONSTRAINTS',
            p_ref_constraints);
        DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS_AS_ALTER',
            p_constraints_as_alter);
        DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'STORAGE', p_storage);
        DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES',
            p_segment_attributes);

        --get table ddl
        BEGIN
            SELECT REPLACE(DBMS_METADATA.get_ddl('TABLE', UPPER(p_table_name), UPPER(p_owner)), '"', '')
              INTO v_table_ddl
              FROM DUAL;

            put_line(v_table_ddl, TRUE, FALSE);
        EXCEPTION
            WHEN OTHERS THEN
                put_line('--no object:' || p_table_name);
                v_temp := SQLERRM;
                put_line(v_temp);
                RETURN;
        END;

        --get comment ddl
        BEGIN
            SELECT DBMS_METADATA.get_dependent_ddl('COMMENT', UPPER(p_table_name), UPPER(p_owner))
              INTO v_comment_ddl
              FROM DUAL;

            put_line(v_comment_ddl, TRUE, FALSE);
        EXCEPTION
            WHEN e_ora_31608 THEN
                put_line('--no comment');
            WHEN OTHERS THEN
                put_line('--no comment');
                put_line(SQLERRM);
        END;

        --get constraint ddl
        BEGIN
            SELECT DBMS_METADATA.get_dependent_ddl('CONSTRAINT', UPPER(p_table_name), UPPER(p_owner))
              INTO v_constraint_ddl
              FROM DUAL;

            put_line(v_constraint_ddl, TRUE, FALSE);

            SELECT DBMS_METADATA.get_dependent_ddl('REF_CONSTRAINT', UPPER(p_table_name), UPPER(p_owner))
              INTO v_ref_constraint_ddl
              FROM DUAL;

            put_line(v_ref_constraint_ddl, TRUE, FALSE);
        EXCEPTION
            WHEN e_ora_31608 THEN
                put_line('--no constraint');
            WHEN OTHERS THEN
                put_line('--no constraint');
                put_line(SQLERRM);
        END;

        --get index ddl
        BEGIN
            SELECT REPLACE(
                       DBMS_METADATA.get_dependent_ddl('INDEX', UPPER(p_table_name), UPPER(p_owner)),
                       '"',
                       ''
                   )
              INTO v_index_ddl
              FROM DUAL;

            put_line(v_index_ddl, TRUE, FALSE);
        EXCEPTION
            WHEN e_ora_31608 THEN
                put_line('--no index');
            WHEN OTHERS THEN
                put_line('--no index');
                put_line(SQLERRM);
        END;

        -- get trigger ddl
        BEGIN
            SELECT DBMS_METADATA.get_dependent_ddl('TRIGGER', UPPER(p_table_name), UPPER(p_owner))
              INTO v_trigger_ddl
              FROM DUAL;

            put_line(v_trigger_ddl, TRUE, FALSE);
        EXCEPTION
            WHEN e_ora_31608 THEN
                put_line('--no trigger');
            WHEN OTHERS THEN
                put_line('--no trigger');
                put_line(SQLERRM);
        END;

        -- get object grant ddl
        BEGIN
            SELECT REPLACE(
                       DBMS_METADATA.get_dependent_ddl('OBJECT_GRANT', UPPER(p_table_name), UPPER(p_owner)),
                       '"',
                       ''
                   )
              INTO v_object_grant_ddl
              FROM DUAL;

            put_line(v_object_grant_ddl, TRUE, TRUE);
        EXCEPTION
            WHEN e_ora_31608 THEN
                put_line('--no object grant');
            WHEN OTHERS THEN
                put_line('--no object grant');
                put_line(SQLERRM);
        END;
    END;

测试一下:

先建立测试表:

SQL> CREATE TABLE tab_test2 (col2 VARCHAR2(10) PRIMARY KEY);

Table created.

SQL> CREATE TABLE tab_test
2     (
3     col1 NUMBER(10) CONSTRAINT pk_test PRIMARY KEY,
4     col2 VARCHAR2(10) CONSTRAINT fk_test REFERENCES tab_test2 (col2),
5     col3 VARCHAR2(10) DEFAULT 'test'
6     );

Table created.

SQL> COMMENT ON TABLE tab_test IS 'table test';

Comment created.

SQL> COMMENT ON COLUMN tab_test.col1 IS 'table test col1';

Comment created.

SQL> COMMENT ON COLUMN tab_test.col2 IS 'table test col2';

Comment created.

SQL> CREATE INDEX idx_test ON tab_test(col2,col3);

Index created.

SQL> CREATE OR REPLACE TRIGGER trg_test
2         AFTER INSERT OR UPDATE OR DELETE
3         ON tab_test
4         FOR EACH ROW
5     BEGIN
6         DBMS_OUTPUT.put_line('heihei!');
7     END;
8     /

Trigger created.

SQL> GRANT SELECT,UPDATE ON tab_test TO utcore;

Grant succeeded.

执行过程获得table的完整定义:

SQL> set serverout on
SQL> exec dbms_ut.get_table_ddl('tab_test');
------------------------------------------------------------

CREATE TABLE WACOS.TAB_TEST (COL1 NUMBER(10,0), COL2 VARCHAR2(10), COL3
VARCHAR2(10) DEFAULT 'test', CONSTRAINT PK_TEST PRIMARY KEY (COL1) USING INDEX
PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576
MINEXTENTS 1 MAXEXTENTS 21474
83645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE WACOS ENABLE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0 FREELISTS
1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE WACOS ;

------------------------------------------------------------

   COMMENT ON COLUMN "WACOS"."TAB_TEST"."COL1" IS 'table test col1';

COMMENT ON COLUMN "WACOS"."TAB_TEST"."COL2" IS 'table test col2';

   COMMENT
ON TABLE "WACOS"."TAB_TEST" IS 'table test';

------------------------------------------------------------

ALTER TABLE "WACOS"."TAB_TEST" ADD CONSTRAINT "PK_TEST" PRIMARY KEY ("COL1")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT
1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST
GROUPS 1 BUFFER_POOL D
EFAULT) TABLESPACE "WACOS" ENABLE;

------------------------------------------------------------

ALTER TABLE "WACOS"."TAB_TEST" ADD CONSTRAINT "FK_TEST" FOREIGN KEY ("COL2")
REFERENCES "WACOS"."TAB_TEST2" ("COL2") ENABLE;

------------------------------------------------------------

CREATE INDEX WACOS.IDX_TEST ON WACOS.TAB_TEST (COL2, COL3) PCTFREE 10
INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1
MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL
DEFAULT) TABLESPACE WACOS ;

CREATE UNIQUE INDEX WACOS.PK_TEST ON WACOS.TAB_TEST (COL1) PCTFREE 10 INITRANS 2
MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS
2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE WACOS ;

------------------------------------------------------------

CREATE OR REPLACE TRIGGER "WACOS"."TRG_TEST" 
            AFTER INSERT OR UPDATE OR
DELETE
            ON tab_test
            FOR EACH ROW
        BEGIN
        
DBMS_OUTPUT.put_line('heihei!');
        END;
/
ALTER TRIGGER "WACOS"."TRG_TEST"
ENABLE;

------------------------------------------------------------

GRANT SELECT ON WACOS.TAB_TEST TO UTCORE;

GRANT UPDATE ON WACOS.TAB_TEST
TO UTCORE;

------------------------------------------------------------

PL/SQL procedure successfully completed.

SQL>


转载自:http://blog.youkuaiyun.com/cunxiyuan108/article/details/12280929 如有侵权请联系博主


pg_get_table_ddl:PostgreSQL PLPGSQL函数,可为给定的schematable生成表DDL pg_get_table_ddl PostgreSQL PL / PGSQL函数,它为给定的模式/表生成表DDL。 (c)2021 SQLEXEC LLC GNU V3和MIT许可证也相应地传达。可以在上报告错误 历史 生成表DDL有多种形式,这是要添加到列表中的另一种形式。我认为这比我在互联网上找到的更为完整。 概述 有两种方法可以调用此函数: 仅提供前两个参数:模式和表。这将在create table语句中包括所有外键。 提供boolean = False作为可选的第3个参数,它将生成没有外键定义的create table语句。 例子 选择* from public.pg_get_table_ddl('myschema','mytable');选择* from public.pg_get_table_ddl('myschema','mytable',False); 立即下载

相关推荐

(入门向)在Ubuntu22.04.3安装Matlab2021b,以及无法安装在当前目录下的解决办法(见最后)

还有这个/usr/local是只读状态,我试过sudo chmod..去改那个文件的读,结果还是安装不了,我不是这个默认路径,因为它文件夹还是只读,于是我在matlab2021b下创了一个bin,并选上。输入完成后,依次按y,因为里面有三个文件,他会让你确定3次密码,直接yyy跳过即可。你可能会遇到装不下的情况,这个软件占30g,可是你分配给虚拟机就剩10g。,于是我去Downloads下建了一个matlab2021b文件夹,果然好使,3).此时,会提示你输入密码,因为这个rar是有密码的,

harrype的博客 7285

写了个存储过程获得table的完整定义

包括create table, comment, index, trigger, object grant.不知道还缺啥? 我放在了自己常用的一个package里(dbms_ut 包,包括常用脚本)。 过程如下:     PROCEDURE get_table_ddl(         p_table_name IN VARCHAR2,         p_owner IN VARCHA

专注Oracle EBS---低调的奢华 1328

LayaNative源码编译

修改好后的LayaNative2.0需要重新编译生成Android和iOS所需要的动态库文件。

末之 1359

如何导出oracle库中表,请问,如何导出数据库中的所有表的建表sql语句

得到当前用户的所有表的建表语句,要求是可以执行的用户必须有SELECT ANY TABLE权限,缺点是对索引的创建作的并不好,没有加入索引参考的是shiqiguo 网友的一篇帖子create or replace procedure get_table_ddlAUTHID CURRENT_USERas/************************************************...

weixin_35703557的博客 352

STM32驱动HC-SR04超声波模块:两种精准测距方案详解

本文详解STM32驱动HC-SR04超声波模块的两种精准测距方案:定时器中断计数法和外部中断边沿检测法。涵盖硬件连接、代码实现与优化技巧,帮助开发者根据精度和复杂度需求选择合适方案,提升超声波测距在嵌入式项目中的稳定性和准确性。

g5h6i的博客 684

从波形图到参数调优:一次无感BLDC电机启动失败的深度解析

本文深入解析无感BLDC电机启动失败案例,通过波形分析揭示参数不匹配和IPM保护机制触发等关键问题。详细探讨了过零点检测、PWM周期设置及强拖参数调优的底层逻辑,并分享IPM模块保护机制与实战调优技巧,最终实现99.98%的启动成功率。

weixin_29182481的博客 820

使用SQL获取oracle表结构语句(DDL语句)

生成DDL语句时,其中会包含对象所有者(owner)的信息,这个信息通常被写入DDL语句中。如果你想要移除DDL语句中的对象所有者信息,可以使用一些替换或修改字符串的方式来实现。以上SQL语句可以在Oracle数据库中查询指定Schema中特定对象(表、视图、存储过程、函数、触发器)的DDL语句。替换为你要查询的Schema名称,将。替换为你要查询的Schema名称,将。替换为你要查询的Schema名称,将。替换为你要查询的Schema名称,将。替换为你要查询的Schema名称,将。

weixin_45881248的博客 5129

Unity Hololens2开发|(一)环境配置

开发过程中预览和调试应用:可以在电脑上的 Unity 编辑器中以播放模式本地运行应用,并将体验流式传输到 HoloLens2。将来自 HoloLens2 的输入(视线、手势、语音和空间映射)发送到电脑,在其中内容以虚拟沉浸式视图渲染。在HoloLens2设备中,打开Settings面板,依次选择Update & Security > For Developers,打开“Developer Mode”。在开发计算机中打开控制面板,依次选择“更新和安全> 开发者选项”,打开“开发人员模式”;

游戏开发小Y的博客 14万+

Oracle获取干净的建表DDL语句,不含其它存储、表空间、段属性

早上一个同事资讯怎么获取到建表语句而且是不带存储那种SQL。Oracle自己提供了一个函数DBMS_METADATA.GET_DDL,但是获取到的建表语句含有存储、表空间、以及一些其他段的属性。如图: 看到这个获取到的ddl语句,想通过利用Oracle函数来截取的方式获取建表语句。 思路为:1.通过get_ddl获取建表语句 abc2.将abc中的pctfree'替换成';'3.计算';'...

weixin_30879833的博客 988

QGIS004:【05矢量属性表】-保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段

摘要:QGIS矢量属性表工具箱包括保留字段、删除字段、添加唯一值索引字段、添加字段到属性表、添加自增量字段、添加XY字段到图层、文本型转浮点型、重构字段、重命名字段等选项,本文介绍各选项的基本操作。

qq_31762031的博客 2312

什么是 SAP PCE?

SAP Private Cloud Edition 是一种基于云计算的部署模式,它结合了公有云的灵活性和私有云的安全性,为企业提供了量身定制的云服务。在 PCE 环境中,SAP 托管和维护客户的应用系统(如 SAP S/4HANA、SAP SuccessFactors 或 SAP BW/4HANA),同时客户拥有更高的定制化权限。专属环境:每个客户在云中拥有独立的资源,这保障了更高的安全性和性能。全面托管:SAP 提供基础架构、系统管理和更新服务,降低了客户的运维成本。灵活扩展。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2244

mysql 自定义函数返回table

我整理的一些关于【MySQL,存储过程】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/yOSbkRMySQL自定义函数返回表格的实现 在数据库操作中,MySQL是最常用的关系数据库之一,它提供了丰富的功能,包括自定义函数。自定义函数可以简化很多重复的操作,尤其是当我们需要对...

weixin_30798867的博客 616

【爬虫实战】Instagram博主图片爬取:模拟登录+滚动加载,轻松抓取高清美图

在当今社交媒体时代,Instagram作为全球最受欢迎的图片分享平台之一,汇聚了无数优质博主的海量精美图片。对于数据爱好者、营销分析师、AI训练数据收集者来说,如何高效、稳定地爬取Instagram博主的图片,成为了一项极具实用价值的技术挑战。然而,Instagram的反爬机制日益严格,传统的静态页面请求已经无法满足需求。本文将带你从零开始,使用2024-2025年最新技术栈,实现模拟登录、滚动加载、高清图片下载的全流程爬虫。✅ 全流程代码可直接运行✅ 模拟手机端请求绕过反爬。

2201_76125261的博客 596

mysql 存储过程 范例_mysql存储过程范例_mysql

mysql存储过程实例MySQL 5.0以后的版本开始支持存储过程,存储过程具有一致性、高效性、安全性和体系结构等特点。为了保证数据的完整性、一致性,提高应用的性能,常采用存储过程技术。MySQL 5.0之前的版本并不支持存储过程,随着MySQL技术的日趋完善,存储过程将在以后的项目中得到广泛的应用。MySql存储过程简单实例:/********************* 创建表 ********...

weixin_32380501的博客 503

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

SQl编程存储过程

过程化存储 存储过程,一组为完成特定功能、经过编译后存储在数据库中的SQL语序集 灵活性:存储过程中可以进行流程控制和循环操作来完成复杂的判断和运算 一致性:通过存储过程可以使一些关联的操作一起发生,从而维护了数据库的完整性 高效性:存储过程有效减少了数据库开发人员和程序员的工作量 语法 CREATE PROCEDURE SP_...

depon0000的博客 379

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

mysql存储过程

msyql存储过程 (动态条件与游标) --存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数 create procedure p_procedurecode(in sumdate varchar(10)) begin declare v_sql varchar(500); --需要执行的SQL语句 d...

weixin_30408739的博客 66

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

存储过程操作主外键

CREATE TABLE Dept--系/学院表(DeptId int identity(1,1) primary key,DeptName nvarchar(50),--系名称 AddTime datetime default(getdate())) CREATE TABLE Grade--班级表(GradeId int identity(1,1) primary key,DeptId int...

weixin_30687811的博客 179

【转载】SAP AMDP数据库存储过程,AMDP语法实例

好像灵隐寺那边拍的~版权声明:本文为优快云博主「Gong JX」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.youkuaiyun.com/qq_40977705/article/details/115932873目录AMDP介绍AMDP语法DECLARE变量声明CURSOR循环(FOR)数组的使用IF...ELSE内表读取方法嵌套调用...

森林木的博客 1253

Hibernate3.x调用存储过程

转自:http://www.blogjava.net/keweibo/articles/145983.html Hibernate3.x调用存储过程 原文出处:http://tech.it168.com/j/d/2007-05-14/200705141007843.shtml说明:该文不得转载 摘要:本文以详尽的实例展示了hibernate3.x中调用存储过程各步骤,从建立测试表、存储...

Only the heart peace will be prosperity 132

写MySQL存储过程实现动态执行SQL

写MySQL存储过程实现动态执行SQL --存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数 create procedure p_procedurecode(in sumdate varchar(10)) begin declare v_sql varchar(500); ...

weixin_34257076的博客 54

mysql利用存储过程存储大数据量

Mysql利用存储过程插入400W条数据 CREATE TABLE dept( /*部门表*/ deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/ dname VARCHAR(20) NOT NULL DEFAULT "",/*名称*/ loc VARCHAR(13) NOT NULL DEFAULT "" /*地点*/ )ENGI

GaoChenXi 2701

删除无限极分类的sql存储过程

删除无限极分类的sql存储过程 CREATE PROCEDURE [dbo].[Category_Delete] @CategoryId int AS --DELETE [Category] -- WHERE CategoryId=@Category...

ddqt79136的博客 121

mysql存储过程和命令

[转载][http://weidongke123-126-com.iteye.com/blog/1675375] 显示数据库中所有的存储过程 show procedure status; 显示某个存储过程的详细信息(sp为存储过程名称) show create procedure sp; 显示当前库中所有表 show tables; 显示某个表的建表语句(test为表名) sho

584

SQL SERVER拓展存储过程

一直都是C#调用数据库的对象,这里介绍的拓展存储过程可以在DB中调用C#的dll并且返回到DB一些信息(表或者字符串) C#代码如下,主要用以返回一个路径下面的文件,用以测试 下面只是为了创建一个类库,从而产生一个dll,所以操作如下: using Microsoft.SqlServer.Server; using System; using System....

weixin_30640769的博客 222

存储过程事务控制

存储过程里的事务操作:createorreplaceprocedurepr_mypro2(p_ainvarchar2,p_binvarchar2,p_countoutnumber)tempvarchar2(1000);/**//*定义临时变量*/isbeginselectcodeintop_countfromtabl...

weixin_34132768的博客 643
上一篇: oracle 常见v$视图整理
下一篇: ORACLE 常用脚本
fantasyagain
博客等级 码龄19年 18粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值