2011-05-19 13 views
5

Quiero crear una secuencia en el oráculo donde el valor máximo del campo de columna (Empid) debe ser el valor mínimo de la secuencia.creación de secuencia en el oráculo

La continuación era la que yo encontré en nuestra misma StackExchange

create sequence mytemp_seq start with &v_Startval; 

Este comando solicita que introduzca el valor máximo de teh nombre de la columna, que tengo que entrar.

¿Cómo puedo fijar el valor de & v_startval sin ella provocó, pero establecer directamente los valores de la declaración abajo

select max(empid) from mytemp.. 

Estoy tratando de esta manera a continuación

create sequence mytemp_seq start with (SELECT MAX(empid) from mytemp) 

pero, duerma trabajo.

+0

Ambas respuestas (Tony Andrews y schurik) a continuación son buenos en diferentes circunstancias. Si esto es parte de un script de despliegue, usaría la respuesta de schurik, ya que producirá un archivo de spool más descriptivo. Si vas a hacer esto como una actividad normal, insertaría la respuesta de Tony en un paquete (y cuestionaría el diseño, la creación dinámica de secuencias suele ser el resultado de una mala decisión de diseño). – Allan

Respuesta

7

que podría hacerlo con un poco de PL/SQL:

declare 
    v_startval integer; 
begin 
    select max(empid)+1 into v_startval from mytemp; 
    execute immediate 'create sequence mytemp_seq start with ' || v_startval; 
end; 
+0

Gracias. Eso funcionó. – user682571

5

En sqlplus se puede hacer

col max_id new_value seq_min_val 
SELECT MAX(empid)+1 AS max_id from mytemp; 
create sequence mytemp_seq start with &seq_min_val; 
+1

+1 ¡Prefiero esta solución que la mía! –

Cuestiones relacionadas