Преобразовать целое число в varchar и назначить переменную pl / sql - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь назначить преобразование значения INTEGER в STRING и присвоить его другой переменной, а затем использовать эту переменную для отображения значения в тексте.Что-то идет не так, и я получаю сообщение об ошибке «Ограничения длины строки должны быть в диапазоне (1-32767)».

CREATE OR REPLACE PROCEDURE 
numdocs(usr_input IN VARCHAR)
AS
    user_name VARCHAR(20);
    num_docs INTEGER;
    numdoctext VARCHAR(20);
    num_converted STRING;
BEGIN
    user_name := usr_input;
    SELECT COUNT(*)
    INTO num_docs FROM UserPermissions WHERE 
    UserName = user_name;
    SELECT to_char(to_date(num_docs,'j','jsp')) INTO num_converted from dual;
    dbms_output.put_line('converted is ' || num_converted);
    IF num_docs = 0 THEN dbms_output.put_line('No documents for ' || user_name);
    ELSIF num_docs > 0 THEN dbms_output.put_line(user_name || ' has permission to view ' || num_converted || ' documents.');
    END IF;
END;
/

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

На основании вашего последнего комментария:

SELECT to_char (to_date (: number, 'j'), 'jsp') FROM DUAL;Это был пример, из которого я собирался преобразовать целое число в слово.

И код, который вы на самом деле отображаете в вопросе, похоже, проблема в том, как заключить в код закрывающие скобки,Затем вы ставите оба в конце «to_char», в то время как в примере есть один после «to_date».

Таким образом, ваш выбор должен читать:

SELECT to_char(to_date(num_docs,'j'),'jsp') INTO num_converted from dual;
0 голосов
/ 26 сентября 2019

Демонстрация и определение STRING как типа, по крайней мере, в plsql.

create table string_tab(column1 varchar2(20) );
insert into  string_tab values('AABC');

declare 
  as_string   string(20);
  as_varchar  varchar2(20);
begin 
  select column1 into as_string from string_tab;
  dbms_output.put_line('as string=>' || as_string);

  select column1 into as_varchar from string_tab;
  dbms_output.put_line('as varchar=>' || as_varchar );

  if as_string = as_varchar 
  then 
      dbms_output.put_line(' and they compare the same.');
  else 
      dbms_output.put_line (' but they don''t compare the same.'); 
  end if;

Определение.Из пакета sys.standard извлекается следующее:

  type VARCHAR2 is NEW CHAR_BASE;
  subtype VARCHAR is VARCHAR2;
  subtype STRING is VARCHAR2;

Он не используется много, не думайте, что я его когда-либо видел.Но он действителен в plsql, похоже на недопустимый тип SQL!

...