Quelle est la taille maximale de VARCHAR2 en PL/SQL et SQL?

je suis sur Oracle 10g. Dans une exigence, je dois augmenter la taille d'une variable PL/sql varchar2. Il est déjà à 4000 taille. J'ai lu que "en PL/SQL, VARCHAR2 peut être jusqu'à 32767 octets. Pour SQL la limite est de 4000 octets"

puis-je augmenter la taille de cette variable sans m'inquiéter de la limite de SQL?

19
demandé sur JohnOsborne 2014-08-11 11:00:52

4 réponses

http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i54330)

chaîne de caractères de longueur Variable ayant des octets ou des caractères de taille maximale. La taille maximale est de 4000 octets ou caractères, et le minimum est de 1 octet ou 1 caractère. Vous devez spécifier la taille de VARCHAR2. BYTE indique que la colonne aura une sémantique de longueur de byte; CHAR indique que la colonne aura du caractère sémantique.

mais dans Oracle Databast 12c peut-être 32767 (http://docs.oracle.com/database/121/SQLRF/sql_elements001.htm#SQLRF30020)

chaîne de caractères de longueur Variable ayant des octets ou des caractères de taille maximale. Vous devez spécifier la taille de VARCHAR2. La taille minimale est de 1 octet ou 1 caractère. Taille maximale est de: 32767 octets ou caractères si MAX_STRING_SIZE = EXTENDED 4000 octets ou caractères si MAX_STRING_SIZE = STANDARD

17
répondu Andre Kirpitch 2014-08-11 08:45:45

selon le lien de documentation officiel partagé par Andre Kirpitch, Oracle 10g donne une taille maximale de 4000 octets ou caractères pour varchar2. Si vous utilisez une version supérieure d'oracle (par exemple Oracle 12c), vous pouvez obtenir une taille maximale de 32767 octets ou caractères pour varchar2. Pour utiliser la fonctionnalité étendue de type de données d'oracle 12, Vous devez démarrer oracle en mode de mise à niveau. Suivez les étapes ci-dessous dans l'invite de commande:

1)Login as sysdba (sqlplus / as sysdba)

2) SHUTDOWN IMMEDIATE;

3)STARTUP UPGRADE;

4)ALTER SYSTEM SET max_string_size=extended;

5)Oracle\product.1.0.2\rdbms\admin\utl32k.sql

6)SHUTDOWN IMMEDIATE;

7)STARTUP;

5
répondu Ashwath Padmashali 2016-08-02 17:13:23

si vous utilisez L'encodage UTF-8, alors un caractère peut prendre un nombre variable d'octets (2 - 4). Pour PL / SQL, la limite de varchar2 est de 32767 octets, pas de caractères. Voir comment j'augmente une variable PL/SQL varchar2 de la taille de 4000 caractères:

SQL> set serveroutput on
SQL> l
  1  declare
  2    l_var varchar2(30000);
  3  begin
  4    l_var := rpad('A', 4000);
  5    dbms_output.put_line(length(l_var));
  6    l_var := l_var || rpad('B', 10000);
  7    dbms_output.put_line(length(l_var));
  8* end;
SQL> /
4000
14000

PL/SQL procedure successfully completed.

Mais vous ne pouvez pas insérer dans votre tableau la valeur de cette variable:

SQL> ed
Wrote file afiedt.buf

  1  create table ttt (
  2    col1 varchar2(2000 char)
  3* )
SQL> /

Table created.

SQL> ed
Wrote file afiedt.buf

  1  declare
  2    l_var varchar2(30000);
  3  begin
  4      l_var := rpad('A', 4000);
  5      dbms_output.put_line(length(l_var));
  6      l_var := l_var || rpad('B', 10000);
  7      dbms_output.put_line(length(l_var));
  8      insert into ttt values (l_var);
  9* end;
SQL> /
4000
14000
declare
*
ERROR at line 1:
ORA-01461: can bind a LONG value only for insert into a LONG column
ORA-06512: at line 8

comme solution, vous pouvez essayer de diviser la valeur de cette variable en plusieurs parties ( SUBSTR) et les Entreposer séparément.

4
répondu zaratustra 2018-05-17 17:05:46

Je ne suis pas sûr de ce que vous vouliez dire par "Puis-je augmenter la taille de cette variable sans m'inquiéter de la limite de SQL?". Tant que vous n'essayez pas d'insérer un plus de 4000 VARCHAR2 dans une colonne SQL de VARCHAR2 il n'y a pas de quoi s'inquiéter.

Voici la référence exacte (c'est 11g mais c'est vrai aussi pour 10g)

http://docs.oracle.com/cd/E11882_01/appdev.112/e17126/datatypes.htm

VARCHAR2 taille maximale en PL/ SQL: 32 767 octets Taille maximale en SQL 4 000 octets

1
répondu hol 2014-08-11 08:46:36