oracle-procedure v0.3.0
Classe Procedure
A classe Procedure é uma classe base que permite chamar stored procedures do Oracle Database através do TypeORM. Ela possui dois decorators (BindIn e BindOut) para definir argumentos de entrada e saída. Qualquer propriedade da classe que recebe um desses decorators é transformada automaticamente em um binding na mesma ordem em que foi declarada.
Instalação
npm install oracle-procedureConstrutor
O construtor da classe Procedure recebe uma conexão iniciada do TypeORM DataSource ou oracledb.Connection
constructor(connection: DataSource | oracledb.Connection);Propriedades Procedure
A implementação da classe procedure precisa de uma variável protected name que será usado como o nome da procedure
Argumento Store Procedure
Os decorators @BindIn() e @BindOut() são usados para definir argumentos de entrada e saída em uma classe que estende
a classe base Procedure,
Warning Todas as propriedades da classe com
BindIneBindOutserão adicionados como argumento da store procedure na mesma ordem de declaração
@BindIn()
O decorator @BindIn() é usado para definir argumentos de entrada, ele possui um parâmetro não obrigatório que define o tipo do argumento da procedure,
por padrão é assumido o tipo string (converte-se para oracledb.STRING)
Observação: Todas as constantes do driver
oracledbsão aceitas
@BindIn('number')
codigo:number = 1@BindOut()
O decorator @BindOut() é usado para definir argumentos de saída, todos argumentos de saída são retornados como resultados da execução da procedure conforme o tipo declarado.
@BindOut('boolean')
active:boolean
@BindOut('cursor')
data:anyExecução
O método execute() é responsável por executar a stored procedure e devolver os resultados. Ele não recebe nenhum parâmetro e devolve uma promise das propriedades definidas pelo decorator BindOut.
Uso
Para utilizar a classe base Procedure, você precisa criar uma nova classe que extenda a classe Procedure. Nessa nova classe, você pode definir as entradas e saídas da stored procedure usando os decorators BindIn e BindOut, respectivamente. Qualquer propriedade da classe que recebe um decorator de entrada ou saída é transformado automaticamente em bindings na mesma ordem que foi declarado.
Aqui está um exemplo de chamada da procedure RECOVERY_USER_DATA que possui o argumento number year e me devolve uma string status e um cursor
que serão os resultados encontrados com a data de contratação maior que o argumento year:
class RecoveryUserData extends Procedure {
protected name = "recovery_user_data";
@BindIn("number")
year: number;
@BindOut()
status: string;
@BindOut("cursor")
data: any;
}
async function executeProcedure() {
//Cria e inicia a conexão com o banco de dados
const connection = new DataSource({
/* sua configuração */
});
await connection.initialize();
//Instancia da nossa classe RecoveryUserData
const procedure = new RecoveryUserData(connection);
procedure.year = 2023;
//Recuperação dos resultados de execução
const results = await procedure.execute();
console.log(results);
/*
{
"status": "active",
"data": [
{
"id": 1,
"name": "John Doe"
"year_hire": "2023"
}
]
}
*/
}
executeProcedure();Exceções
ReferenceError: lançada quando a propriedade name não está definida na classe que herda a classe Procedure.TypeError: lançada quando os tipos de dados dos valores de entrada ou saída não estão corretos.Error: lançada quando ocorre um erro durante a execução da procedure.