oracle - 在 Oracle pl/sql 函数中定义类型

标签 oracle plsql oracle-sqldeveloper

我正在尝试创建一个 pl/sql 函数(我第一次接触 pl/sql 函数),它将以 10 为基数的数字转换为以 26 为基数的字符串(我的以 26 为基数的是 A..Z)。

create or replace function generateId(numericId IN NUMBER) RETURN VARCHAR2 AS
declare
  type array_t is varray(26) of CHAR;
  char_array array_t := array_t('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
  res varchar2(3);
  targetBase INTEGER := char_array.count;
begin
  LOOP
      res = char_array[REMAINDER(numericId, targetBase)] + result;
      numericId = numericId / targetBase;
  EXIT WHEN (numericId = 0);

  RETURN res;
end;

我得到的错误是:

Error(2,1): PLS-00103: Encountered the symbol "DECLARE" when expecting one of the following:     begin function pragma procedure subtype type <an identifier>    <a double-quoted delimited-identifier> current cursor delete    exists prior external language The symbol "begin" was substituted for "DECLARE" to continue. 

我的猜测是我将声明粘贴到了错误的位置,但我不知道它应该放在哪里。

最佳答案

您的代码中有太多语法错误。

  1. oracle 中的赋值是使用 := 而不是 =

  2. 数组索引使用 () 而不是 [] 引用

  3. 您不能为 IN 变量赋值 numericId = numericId/targetBase

  4. 检查 loop statement 的语法- 你缺少结束循环

  5. 要获取数组计数,请使用 COUNT()

    正如评论所暗示的那样

  6. 删除声明

关于oracle - 在 Oracle pl/sql 函数中定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31433824/

相关文章:

oracle - 如何在 PL/SQL 中使用 select 语句为 SQL*Plus 变量赋值?

sql - 甲骨文 SQL : Trigger to add grants after creating view

function - PL/SQL 将函数作为参数传递

sql - 在 NUMBER 列的 IN 子句中使用逗号分隔值

oracle - 使用PL/SQL Developer插入时出现问题

oracle - oracle sql developer中如何解决 "Got minus one from a read call"?

oracle - 如何使用 Oracle SQL Developer 运行存储过程?

java - 如何提高 java 应用程序从 oracle 数据库中获取大数据的性能?

c# - 如何不引用程序集的特定版本?

oracle - 将 SQL 开发人员连接到 Oracle 12c