`

存储过程

 
阅读更多
CREATE OR REPLACE PROCEDURE P_BIG_TYPE_COMPONENT(BIG_CATEGORY_ID IN varchar2) 
as 
--DECLARE
cols varchar2(256);-- 只声明
BIG_TABLE_NAME_PREFIX VARCHAR2(4000);
CREATESQL VARCHAR2(4000);
INSERTSQL VARCHAR2(4000);
LEVEL_TABLE_COLS VARCHAR2(4000);
TABLE_NUM NUMBER;

  BEGIN
  BIG_TABLE_NAME_PREFIX := 'CC_BIG_';
  --获取大类下所有字段 (TODO 后续用,隔开数据  wm_concat ORACLE11要替换)
  select cols into cols from (
    select   
    distinct wm_concat(
    nvl2(
       (select soa.name from sm_object_attribute soa where soa.attr_id = cca.attr_id), 
       ((select soa.name from sm_object_attribute soa where soa.attr_id = cca.attr_id) || ' varchar2(256),'),
       ''
    ))
    || 'ID varchar2(256) ' cols  
    From 
      ci_category_attr cca where cca.category_id in
      (select bc.category_id from br_category bc 
      start with bc.category_id = BIG_CATEGORY_ID connect by prior bc.category_id = PARENT_ID)
  );
  --删除表
  SELECT COUNT(1) INTO TABLE_NUM FROM USER_TABLES WHERE TABLE_NAME = UPPER(BIG_TABLE_NAME_PREFIX||BIG_CATEGORY_ID);
  IF TABLE_NUM > 0 THEN
    EXECUTE IMMEDIATE ('drop table ' || BIG_TABLE_NAME_PREFIX||BIG_CATEGORY_ID ) ;
  END IF;
  --创建表
  CREATESQL:='create table ' || BIG_TABLE_NAME_PREFIX||BIG_CATEGORY_ID || '(' || cols ||')';
  dbms_output.put_line(CREATESQL);
  EXECUTE IMMEDIATE CREATESQL ;

--2.将大类下所有叶子节点特有属性表数据查出来 ,获取所有子类, 取出表名, 再查询所有表名, 放入大表中保存; 
     for bc in (select bc.table_name from br_category bc 
           where level = 3
           start with bc.category_id = BIG_CATEGORY_ID connect by prior bc.category_id = PARENT_ID) LOOP
     --小类列,作为大表的属性 (TODO 更改wm_concat方式)
     select COLUMN_NAME into LEVEL_TABLE_COLS from (select wm_concat(COLUMN_NAME) COLUMN_NAME from user_tab_columns where table_name =bc.table_name);    
     dbms_output.put_line('小类(子表)属性:'||LEVEL_TABLE_COLS);
     --如果小类属性(LEVEL_TABLE_COLS)不为空,则将小类数据插入大类表中
     if LEVEL_TABLE_COLS <>' ' then
       INSERTSQL:= 'insert into ' || BIG_TABLE_NAME_PREFIX||BIG_CATEGORY_ID||'('|| LEVEL_TABLE_COLS ||')' || ' select '||LEVEL_TABLE_COLS||' from '|| bc.table_name || '';  
       dbms_output.put_line(INSERTSQL);  
       EXECUTE IMMEDIATE INSERTSQL ;
       COMMIT;
     END if;
     END LOOP;
END;

drop table CC_BIG_CC00000154
call P_BIG_TYPE_COMPONENT('CC00000154');


--遍历大类, 按大类创建带特有属性的大类表:
DECLARE

begin
  for bc in (select bc.category_id from br_category bc where parent_id = '1' ) LOOP
     P_BIG_TYPE_COMPONENT(bc.category_id||'');
  end loop;
end;

---循环-----------------------------------------------
CREATE OR REPLACE PROCEDURE P_CREATE_BIG_TYPE_TABLE as 
begin
  for bc in (select bc.category_id from br_category bc where parent_id = '1' ) LOOP
     dbms_output.put_line(bc.category_id);  
     P_BIG_TYPE_COMPONENT(bc.category_id||'');
  end loop;
end;

CALL P_CREATE_BIG_TYPE_TABLE()

---SQL执行后返回值存储-----------------------------------------------
         EXECUTE IMMEDIATE 'select count(a.com_model) count_pp from jt_material a where a.com_model like ' || '''%' ||bc.com_model|| '%''' into count_pp;

------单引号转义----------------------------------------------
查看编译错误:
打开cmd窗口,执行时候后面加/  , 然后show error ,即可看到错误详情
分享到:
评论

相关推荐

    birt调用存储过程

    birt报表中调用存储过程的方法. 目录 1. 概述 3 2. BIRT支持的存储过程返回值类型 3 3. BIRT调用存储过程的语法 4 4. 创建存储过程数据源/集 4 5. 在BIRT中使用存储过程 5 调用返回单结果集的存储过程。 5 调用...

    SQL存储过程试题及答案

    SQL存储过程试题及答案 SQL存储过程是数据库中的一种程序单元,能够完成特定的数据库操作。今天,我们将讨论三道关于SQL存储过程的试题,这些试题涵盖了存储过程的创建、调用和参数传递等方面。 1. 创建分数存储...

    SQL存储过程SQL存储过程SQL存储过程

    SQL存储过程详解 SQL存储过程是数据库管理系统中的一种重要组件,它是一组为了完成特定功能的 SQL 语句,集经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数来执行它。本文将对 SQL存储过程进行详细...

    db2 存储过程语法与实例

    DB2存储过程是一种在数据库管理系统中预编译的SQL代码集合,它允许开发人员封装复杂的业务逻辑和数据处理操作,并可以被多次调用。DB2作为一款强大的关系型数据库管理系统,其存储过程功能强大,提高了应用程序的...

    存储过程扩展学习

    在SQL Server中,存储过程分为不同种类,包括用户定义的存储过程、系统存储过程、临时存储过程以及扩展存储过程。 1. **用户定义的存储过程**:由开发人员或DBA创建,可以根据业务需求定制各种复杂操作,如数据处理...

    ORACLE的存储过程的异步调用

    ORACLE 存储过程的异步调用 本文讨论了 ORACLE 存储过程的异步调用方法,旨在解决客户端长时间等待存储过程执行的问题。主要思路是使用 DBMS_JOB 包将主处理存储过程作为任务提交到任务队列中,并通过 DBMS_PIPE 包...

    mysql存储过程教程

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...

    SQL Server存储过程

    **SQL Server 存储过程详解** SQL Server 存储过程是一种预编译的数据库对象,它集合了一系列的SQL语句和控制流语句,用于执行特定的数据库操作。存储过程的作用在于提高数据库的性能和安全性,减少网络流量,提供...

    C# winform调用SQL存储过程-菜鸟入门 详细注释

    内容概要:简单的C# winform调用存储过程实例,创建存储过程入参,通过SqlConnection对象和SqlCommand对象调用存储过程,获取存储过程的出参并显示出来,详细代码注释,希望对用到C#调用存储过程的小伙伴有帮助 ...

    oracle存储过程学习经典入门

    本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储过程的高级应用,包括 Hibernate 调用 Oracle 存储过程和 Java 调用 Oracle 存储过程的方法。 Oracle 存储过程基础知识 Oracle 存储过程是 Oracle...

    学习sql存储过程的心得

    SQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集合,它们被预先编译并存储在数据库中,可以通过一个名称来调用执行。学习SQL存储过程是提升数据库管理和应用开发效率的关键步骤,它可以帮助我们更好...

    SQL_Server存储过程调试指南

    资源名称:SQL_Server存储过程调试指南内容简介: 存储过程( Stored Procedure)是一组为了完成特定功能的 SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来...

    存储过程文档--mysql

    存储过程文档--MySQL 存储过程是 MySQL 中的一个强大功能,它允许用户预先将常用的或复杂的工作写入 SQL 语句,并将其存储起来,以便在以后的数据库操作中可以快速调用和执行。存储过程可以提高数据库的执行速度,...

    Informatica调用存储过程图文流程

    Informatica调用存储过程图文流程 Informatica 是一款功能强大的数据集成工具,能够帮助用户快速、可靠地集成各种数据源。调用存储过程是 Informatica 中的一种常用功能,下面将详细介绍 Informatica 调用存储过程...

    数据库查询的存储过程

    数据库查询的存储过程 数据库查询的存储过程是数据库管理系统中一种非常重要的概念。它可以将多个SQL语句组合成一个单元,提高数据库的查询效率和性能。 存储过程的优点: 1. 可以在单个存储过程中执行一系列SQL...

    oracle存储过程unwrap解密工具.zip

    Oracle存储过程unwrap解密工具主要用于处理Oracle数据库中的加密存储过程。在Oracle数据库系统中,为了保护敏感代码或数据,开发人员有时会选择对存储过程进行加密。然而,当需要查看、调试或恢复这些加密的存储过程...

    执行存储过程的代码和数据库脚本

    本文将围绕“执行存储过程的代码和数据库脚本”这一主题展开,通过分析提供的Demo.sql文件和执行存储过程的相关知识,帮助初级学习者更好地理解和应用这些概念。 首先,让我们了解一下存储过程的基本概念。存储过程...

    SQL Server中存储过程比直接运行SQL语句慢的原因

    在了解这个问题之前,我们通常认为存储过程具有以下优点:首先,存储过程只在创造时进行编译即可,以后每次执行存储过程都不需再重新编译,而我们通常使用的 SQL 语句每执行一次就编译一次,所以使用存储过程可以...

    针对sqlserver 2008 存储过程通过With Encryption加密方式的解密

    针对 SQL Server 2008 存储过程通过 With Encryption 加密方式的解密 SQL Server 2008 存储过程中使用 With Encryption 加密方式可以对存储过程进行加密保护,以防止未经授权的访问和修改。但是,在某些情况下,...

    Sql Server 存储过程的导出导入.doc

    SqlServer存储过程的导出导入 近日在研究SQL的存储过程,这里我陆续将我在使用存储过程中碰到的问题及解决办法发布到网上,请各位大虾指正。 SqlServer存储过程的导出导入,网上相关资料特别少,经过摸索,这里写...

Global site tag (gtag.js) - Google Analytics