Ваш вопрос состоит из двух частей. Во-первых, как создать буквенно-цифровой ключ. Во-вторых, как получить сгенерированное значение.
Итак, первый шаг - определить источник альфа и числовых компонентов. В следующем примере я использую функцию USER и последовательность Oracle, но у вас будут свои собственные правила. Я поместил код для сборки ключа в триггер, который вызывается всякий раз, когда вставляется строка.
SQL> create table t1 (pk_col varchar2(10) not null, create_date date)
2 /
Table created.
SQL> create or replace trigger t1_bir before insert on t1 for each row
2 declare
3 n pls_integer;
4 begin
5 select my_seq.nextval
6 into n
7 from dual;
8 :new.pk_col := user||trim(to_char(n));
9 end;
10 /
Trigger created.
SQL>
Второй шаг требует использования предложения RETURNING INTO
для получения сгенерированного ключа. Я использую SQL * PLus для этого примера. Признаюсь, я понятия не имел, как подключить этот синтаксис в VB. К сожалению.
SQL> var new_pk varchar2(10)
SQL> insert into t1 (create_date)
2 values (sysdate)
3 returning pk_col into :new_pk
4 /
1 row created.
SQL> print new_pk
NEW_PK
--------------------------------
APC61
SQL>
Наконец, слово предупреждения.
Буквенно-цифровые ключи являются подозрительной конструкцией. Они пахнут "умными ключами", которые, на самом деле, глупы. Умный ключ - это значение, которое состоит из нескольких частей. В какой-то момент вы обнаружите, что хотите получить все строки, где ключ начинается с 'PRD', что означает использование SUBSTR () или LIKE. Еще хуже, когда-нибудь определение смарт-ключа изменится, и вам придется каскадно обновить сложное обновление таблицы и ссылок на внешние ключи. Лучшим вариантом является использование суррогатного ключа (числа) и буквенно-цифровой «ключ», определенный как отдельные столбцы с составным ограничением UNIQUE для обеспечения соблюдения бизнес-правила.
SQL> create table t1 (id number not null
2 , alpha_bit varchar2(3) not null
3 , numeric_bit number not null
4 , create_date date
5 , constraint t1_pk primary key (id)
6 , constraint t1_uk unique (alpha_bit, numeric_bit)
7 )
8 /
Table created.
SQL>