Zastanawiam się, czy w plsql istnieje funkcja podająca maksymalną długość zmiennej.Czy jest możliwe uzyskanie maksymalnej możliwej długości zmiennej
Na przykład, jeśli Oświadczam
DECLARE
varia VARCHAR2(7)
BEGIN
call of a function that would return 7
END
chociaż varia jest null, mogę dostać długość 7 z varchar.
--- exemple
create or replace
TYPE ENREG_320_03 UNDER ENREG_320_BASE(
date_creation VARCHAR2(8),
raison_sociale_emetteur VARCHAR2(35),
adresse_emetteur_1 VARCHAR2(35),
adresse_emetteur_2 VARCHAR2(35),
adresse_emetteur_3 VARCHAR2(35),
num_siret VARCHAR2(14),
ref_remise VARCHAR2(16),
code_bic_emetteur VARCHAR2(11),
type_ident_compte_debit VARCHAR2(1),
ident_compte_debit VARCHAR2(34),
code_devise_compte_debit VARCHAR2(3),
ident_client VARCHAR2(16),
type_ident_compte_frais VARCHAR2(1),
ident_compte_frais VARCHAR2(34),
code_devise_compte_frais VARCHAR2(3),
zone_reserve VARCHAR2(16),
indice_type_debit_remise VARCHAR2(1),
indice_type_remise VARCHAR2(1),
date_execution_souhait VARCHAR2(8),
devise_transfert VARCHAR2(3),
MEMBER FUNCTION get_date_creation RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.date_creation IS NULL THEN lpad(' ', 8, ' ') ELSE rpad(SELF.date_creation, 8, ' ') END;
END get_date_creation;
MEMBER FUNCTION get_raison_sociale_emetteur RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.raison_sociale_emetteur IS NULL THEN lpad(' ', 35, ' ') ELSE rpad(SELF.raison_sociale_emetteur, 35, ' ') END;
END get_raison_sociale_emetteur;
MEMBER FUNCTION get_adresse_emetteur_1 RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.adresse_emetteur_1 IS NULL THEN lpad(' ', 35, ' ') ELSE rpad(SELF.adresse_emetteur_1, 35, ' ') END;
END get_adresse_emetteur_1;
MEMBER FUNCTION get_adresse_emetteur_2 RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.adresse_emetteur_2 IS NULL THEN lpad(' ', 35, ' ') ELSE rpad(SELF.adresse_emetteur_2, 35, ' ') END;
END get_adresse_emetteur_2;
MEMBER FUNCTION get_adresse_emetteur_3 RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.adresse_emetteur_3 IS NULL THEN lpad(' ', 35, ' ') ELSE rpad(SELF.adresse_emetteur_3, 35, ' ') END;
END get_adresse_emetteur_3;
MEMBER FUNCTION get_num_siret RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.num_siret IS NULL THEN lpad(' ', 14, ' ') ELSE rpad(SELF.num_siret, 14, ' ') END;
END get_num_siret;
MEMBER FUNCTION get_ref_remise RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.ref_remise IS NULL THEN lpad(' ', 16, ' ') ELSE rpad(SELF.ref_remise, 16, ' ') END;
END get_ref_remise;
MEMBER FUNCTION get_code_bic_emetteur RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.code_bic_emetteur IS NULL THEN lpad(' ', 11, ' ') ELSE rpad(SELF.code_bic_emetteur, 11, ' ') END;
END get_code_bic_emetteur;
MEMBER FUNCTION get_type_ident_compte_debit RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.type_ident_compte_debit IS NULL THEN lpad(' ', 1, ' ') ELSE rpad(SELF.type_ident_compte_debit, 1, ' ') END;
END get_type_ident_compte_debit;
MEMBER FUNCTION get_ident_compte_debit RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.ident_compte_debit IS NULL THEN lpad(' ', 34, ' ') ELSE rpad(SELF.ident_compte_debit, 34, ' ') END;
END get_ident_compte_debit;
MEMBER FUNCTION get_code_devise_compte_debit RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.code_devise_compte_debit IS NULL THEN lpad(' ', 3, ' ') ELSE rpad(SELF.code_devise_compte_debit, 3, ' ') END;
END get_code_devise_compte_debit;
MEMBER FUNCTION get_ident_client RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.ident_client IS NULL THEN lpad(' ', 16, ' ') ELSE rpad(SELF.ident_client, 16, ' ') END;
END get_ident_client;
MEMBER FUNCTION get_type_ident_compte_frais RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.type_ident_compte_frais IS NULL THEN lpad(' ', 1, ' ') ELSE rpad(SELF.type_ident_compte_frais, 1, ' ') END;
END get_type_ident_compte_frais;
MEMBER FUNCTION get_ident_compte_frais RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.ident_compte_frais IS NULL THEN lpad(' ', 34, ' ') ELSE rpad(SELF.ident_compte_frais, 34, ' ') END;
END get_ident_compte_frais;
MEMBER FUNCTION get_code_devise_compte_frais RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.code_devise_compte_frais IS NULL THEN lpad(' ', 3, ' ') ELSE rpad(SELF.code_devise_compte_frais, 3, ' ') END;
END get_code_devise_compte_frais;
MEMBER FUNCTION get_zone_reserve RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.zone_reserve IS NULL THEN lpad(' ', 16, ' ') ELSE rpad(SELF.zone_reserve, 16, ' ') END;
END get_zone_reserve;
MEMBER FUNCTION get_indice_type_debit_remise RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.indice_type_debit_remise IS NULL THEN lpad(' ', 1, ' ') ELSE rpad(SELF.indice_type_debit_remise, 1, ' ') END;
END get_indice_type_debit_remise;
MEMBER FUNCTION get_indice_type_remise RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.indice_type_remise IS NULL THEN lpad(' ', 1, ' ') ELSE rpad(SELF.indice_type_remise, 1, ' ') END;
END get_indice_type_remise;
MEMBER FUNCTION get_date_execution_souhait RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.date_execution_souhait IS NULL THEN lpad(' ', 8, ' ') ELSE rpad(SELF.date_execution_souhait, 8, ' ') END;
END get_date_execution_souhait;
MEMBER FUNCTION get_devise_transfert RETURN VARCHAR2 AS
BEGIN
RETURN CASE WHEN SELF.devise_transfert IS NULL THEN lpad(' ', 3, ' ') ELSE rpad(SELF.devise_transfert, 3, ' ') END;
END get_devise_transfert;
Więc zastanawiałem się, czy to prosta funkcja istniała aby uzyskać rozmiar pola więc nie trzeba używać liczb w pobierające: jeśli rozmiar pola ulega zmianie , nie byłoby potrzeby zmiany pobierające, byłoby wypracować bez względu na wielkość varchar
ale rozumiem, że nie jest możliwe
Dziękuję wszystkim
To dziwny wymóg. Rozmiar jest właśnie tam, dlaczego potrzebujesz wywołania funkcji? – Mat
ponieważ, jeśli pewnego dnia zmieni się rozmiar, jest inna część kodu, która nie musi być zmieniona – mlwacosmos
Czy możesz zadeklarować zmienną (i drugą część kodu, która, jak zakładam, jest również inną zmienną) na podstawie kolumny w tabeli; na przykład 'zadeklarować varia tab.col% TYPE'? Wtedy wszystkie odniesienia zostałyby zmienione, gdyby definicja tabeli uległa zmianie. Zależy od tego, jak go używasz - jeśli potrzebujesz maksymalnej wartości dla substr, np. Przy wypełnianiu, wtedy utkniesz. –