Procedimiento almacenado: para crear una nueva tabla utilizando los datos consultados como una columna

Caso de este artículo: Cree una tabla minfo completamente nueva con el nombre de usuario (nombre) encontrado en la tabla de usuario (sys_user) como el nuevo nombre de columna.

Después de comprender los requisitos, comience a escribir procedimientos almacenados.

Paso 1: abra la herramienta de visualización PL / SQL, busque "Procedimientos" en la parte inferior izquierda, haga clic con el botón derecho en la carpeta "Procedimientos", haga clic en "Nuevo ..."

Paso 2: escriba el nombre del procedimiento almacenado (Reglas de nombres de joroba) y los parámetros necesarios (opcional)

Después de escribir la información, haga clic en "Aceptar" y aparecerá un nuevo procedimiento almacenado, como se muestra a continuación

El tercer paso: escribir un procedimiento almacenado (el código detrás contiene comentarios para facilitar la comprensión)

create or replace procedure testFunction(officeId VARCHAR2)  is
      str1 varchar2(4000); --用于存放  获取原数据的SQL语句
      str2 varchar2(200); --用于存放  原数据中的单个元素
      ds sys_refcursor; --游标,指针用于循环【相当于for循环中的下标】
      createsql varchar2(4000); --用于存放  创建新表的SQL语句
      a number; --用于 计数某表是否存在于数据库中
      dl varchar2(4000); --用于存放  删除的SQL语句
      dorpsql varchar2(4000); --用于存放 查询表是否存在的SQL语句
  begin
        DBMS_OUTPUT.ENABLE(buffer_size => null); 
   str1:='SELECT DISTINCT name  from  sys_user  where  office_id ='''||officeId||'''';
   dl:='drop table minfo'; 
   createsql:='create table minfo(合计 varchar2(4000)';
     open ds for str1; --将获取到的原数据进行循环,ds作为过渡元素使用
           LOOP  
              FETCH ds INTO str2; --将ds中的结果依次插入到str2中
              EXIT WHEN ds%NOTFOUND;  --没有数据的时候,循环结束
              createsql:=createsql||','||str2||' varchar2(4000)';    --拼接字符串【原数据中的元素】             
          END LOOP;         
      CLOSE ds;
        createsql:=createsql||')'; 
        dorpsql:='select count(*) from user_tables  where TABLE_NAME =upper(''minfo'')'; --查询表是否存在 
         execute immediate dorpsql into a;  --将查询是否存在的结果赋值给计数变量a
         if a = 1 then  --表 minfo 存在
          execute immediate dl;   --执行删除语句
         end if;
          dbms_output.put_line(createsql); --打印  创建表结构  的语句
         execute immediate createsql;  --执行创建新表的语句

end testFunction;
 

Paso 4: Después de escribir, ejecute el procedimiento almacenado: haga clic en el botón marcado en rojo

El quinto paso: llamar al procedimiento almacenado

(1) Llamar en la base de datos

--语法  call  方法名称(参数)
call testFunction('dea06cee037844cb8ccc1a5a2d29fb92')

(2) Llamar en el archivo XML

<select id="mysql" statementType="CALLABLE" parameterType="map" resultType="java.util.Map">
	{call testFunction(#{officeId,jdbcType=VARCHAR,mode=IN})}
</select>

El sexto paso: ver el resultado final, el nombre de usuario como una columna para crear una nueva tabla minfo con éxito

PD: algunas explicaciones adicionales para los ejemplos

1. Compruebe si existe una tabla en la base de datos [cuenta (*) = 1, existe; igual a 0: no existe]

select count(*) from user_tables  where TABLE_NAME =upper(表名)

2. La función upper (): convierte caracteres en minúsculas en caracteres en mayúsculas

3. DISTINCT: devuelve un valor único, equivalente a group by

4. Salida ilimitada: cuando el contenido que se va a enviar es demasiado grande, se informará un error y se puede evitar esta sintaxis. buffer_size: el número máximo de elementos de procesamiento del búfer. [Probablemente significa, sin investigación profunda]

DBMS_OUTPUT.ENABLE(buffer_size => null);  

5. Imprima información, contenido de salida: equivalente a System.out.println () en código Java;

dbms_output.put_line(要输出的变量); --打印语句

El resultado de salida en el ejemplo es 'instrucción SQL para crear una estructura de tabla': después de ejecutar la instrucción SQL, haga clic en "Salida " para ver

6. Consulta los datos originales

7. Solo hay comillas simples en el proceso de almacenamiento : si se deben escapar varios lugares , es decir, dos "se escaparán en uno" . Hay dos lugares en el ejemplo, el mismo color está marcado como un par

(1) Declaración de consulta, "||": empalme ; marca roja: dos comillas simples se escaparán en una

(2) Las dos comillas simples del logotipo verde se escaparán en una durante la ejecución

Hasta ahora: este caso se ha realizado y finalizado. Las explicaciones / notas en el artículo se basan en la comprensión personal. Si hay algo mal, ¡gracias por corregir!

Publicado 77 artículos originales · 100 me gusta · 70,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/super_DuoLa/article/details/103199300
Recomendado
Clasificación