Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle PL/SQL将字符串转换为数字_Oracle_Plsql_Oracle11g_Converter - Fatal编程技术网

Oracle PL/SQL将字符串转换为数字

Oracle PL/SQL将字符串转换为数字,oracle,plsql,oracle11g,converter,Oracle,Plsql,Oracle11g,Converter,我想把一个字符串转换成数字作为校验和。字符串由universityCode | |‘| | | | | | | | | | studentNumber组成 示例字符串可以是: 星期二荷兰123456789 我必须将这个示例字符串转换为数字,并尝试使用to_NUMBER函数,但我一直得到一个错误 这是我在PL/SQL中创建(或替换)函数的代码: -- Een functie om een International Student Identification Number (ISIN) te g

我想把一个字符串转换成数字作为校验和。字符串由universityCode | |‘| | | | | | | | | | studentNumber组成

示例字符串可以是:

星期二荷兰123456789

我必须将这个示例字符串转换为数字,并尝试使用to_NUMBER函数,但我一直得到一个错误

这是我在PL/SQL中创建(或替换)函数的代码:

-- Een functie om een International Student Identification Number (ISIN) te genereren
CREATE OR REPLACE FUNCTION generateISIN(
  countryCode Country.Code%TYPE,
  universityCode University.Code%TYPE,
  studentNumber VARCHAR2
)
RETURN VARCHAR2
AS
  newStudentNumber VARCHAR2(50) := '';
BEGIN
-- Zorgen voor de goede waarde voordat we de checksum beginnen
newStudentNumber := universityCode || ' ' || countryCode || ' ' || studentNumber;
-- newStudentNumber omzetten naar enkel getallen
newStudentNumber := TO_NUMBER(newStudentNumber);
-- Spaties weghalen in newStudentNumber
newStudentNumber := TRIM(' ' FROM newStudentNumber);
  RETURN newStudentNumber;
END;
/

有人能帮我解决这个问题吗?提前多谢

看起来您应该将初始字符串(可能/将包含字母字符)转换为另一个仅包含数字字符的字符串。然后你会有一些其他的麻烦事要做,但以下可能会让你开始:

FUNCTION CONVERT_STR_TO_NUMERIC(pin_Str IN VARCHAR2)
  RETURN VARCHAR2
IS
  strResult  VARCHAR2(32767);
  c          CHAR(1);
BEGIN
  FOR i IN 1..LENGTH(pin_Str) LOOP
    c := SUBSTR(pin_Str, i, 1);

    strResult := strResult || CASE c
                                WHEN 'A' THEN '16'
                                WHEN 'B' THEN '17'
                                WHEN 'C' THEN '18'
                                WHEN 'D' THEN '19'
                                WHEN 'E' THEN '20'
                                WHEN 'F' THEN '21'
                                WHEN 'G' THEN '22'
                                WHEN 'H' THEN '23'
                                WHEN 'I' THEN '24'
                                WHEN 'J' THEN '25'
                                WHEN 'K' THEN '26'
                                WHEN 'L' THEN '27'
                                WHEN 'M' THEN '28'
                                WHEN 'N' THEN '29'
                                WHEN 'O' THEN '30'
                                WHEN 'P' THEN '31'
                                WHEN 'Q' THEN '32'
                                WHEN 'R' THEN '33'
                                WHEN 'S' THEN '34'
                                WHEN 'T' THEN '35'
                                WHEN 'U' THEN '36'
                                WHEN 'V' THEN '37'
                                WHEN 'W' THEN '38'
                                WHEN 'X' THEN '39'
                                WHEN 'Y' THEN '40'
                                WHEN 'Z' THEN '41'
                                ELSE c
                              END;
  END LOOP;

  RETURN strResult;
END CONVERT_STR_TO_NUMERIC;

例如,如果您使用测试字符串“TUE NL 123456789”调用上述函数,它将生成“353620 2927 123456789”。

看起来您应该将初始字符串(可能/将包含字母字符)转换为另一个仅包含数字字符的字符串。然后你会有一些其他的麻烦事要做,但以下可能会让你开始:

FUNCTION CONVERT_STR_TO_NUMERIC(pin_Str IN VARCHAR2)
  RETURN VARCHAR2
IS
  strResult  VARCHAR2(32767);
  c          CHAR(1);
BEGIN
  FOR i IN 1..LENGTH(pin_Str) LOOP
    c := SUBSTR(pin_Str, i, 1);

    strResult := strResult || CASE c
                                WHEN 'A' THEN '16'
                                WHEN 'B' THEN '17'
                                WHEN 'C' THEN '18'
                                WHEN 'D' THEN '19'
                                WHEN 'E' THEN '20'
                                WHEN 'F' THEN '21'
                                WHEN 'G' THEN '22'
                                WHEN 'H' THEN '23'
                                WHEN 'I' THEN '24'
                                WHEN 'J' THEN '25'
                                WHEN 'K' THEN '26'
                                WHEN 'L' THEN '27'
                                WHEN 'M' THEN '28'
                                WHEN 'N' THEN '29'
                                WHEN 'O' THEN '30'
                                WHEN 'P' THEN '31'
                                WHEN 'Q' THEN '32'
                                WHEN 'R' THEN '33'
                                WHEN 'S' THEN '34'
                                WHEN 'T' THEN '35'
                                WHEN 'U' THEN '36'
                                WHEN 'V' THEN '37'
                                WHEN 'W' THEN '38'
                                WHEN 'X' THEN '39'
                                WHEN 'Y' THEN '40'
                                WHEN 'Z' THEN '41'
                                ELSE c
                              END;
  END LOOP;

  RETURN strResult;
END CONVERT_STR_TO_NUMERIC;
例如,如果您使用测试字符串“TUE NL 123456789”调用上述函数,它将生成“353620 2927 123456789”。

您是否可以使用

SQL> select ora_hash( "mycode" )  from dual;

ORA_HASH('mycode')
----------------------
            2519249214
你能不能不用

SQL> select ora_hash( "mycode" )  from dual;

ORA_HASH('mycode')
----------------------
            2519249214

我发现了这个,它工作得很好:

string VARCHAR2(50) := '';
temp VARCHAR2(50) := '';

for i in 1..length(string) loop
        temp := temp||(ascii(substr(string,i,1))-ascii('A')+16);  
     end loop;

我发现了这个,它工作得很好:

string VARCHAR2(50) := '';
temp VARCHAR2(50) := '';

for i in 1..length(string) loop
        temp := temp||(ascii(substr(string,i,1))-ascii('A')+16);  
     end loop;


将此字符串转换为数字时,您希望得到什么结果?这个数字应该是123456789还是别的什么?@BobJarvis我原以为所有字符都会转换成一个数字,但我的作业描述说a=16,B=17,C=18,……然后你需要使用给定的映射逐个字符地转换它;可能以某种方式映射了偶数数字。根据规则,您可能可以对某些字符(但不是所有字符)使用与ASCII的偏移量。然后假设对每个字符的数值求和,如果这是一个校验和?那么空白字符应该使用什么值?@BobJarvis首先我需要将每个字符转换为一个数字,然后我必须删除所有空白空格。当你将这个字符串转换为一个数字时,你希望得到什么结果?这个数字应该是123456789还是别的什么?@BobJarvis我原以为所有字符都会转换成一个数字,但我的作业描述说a=16,B=17,C=18,……然后你需要使用给定的映射逐个字符地转换它;可能以某种方式映射了偶数数字。根据规则,您可能可以对某些字符(但不是所有字符)使用与ASCII的偏移量。然后大概对每个字符的数值求和,如果这是一个校验和?那么空白字符应该使用什么值?@BobJarvis首先我需要将每个字符转换成一个数字,然后我必须删除所有空白空格如果赋值指定了要使用的算法,如注释所示。如果作业指定了要使用的算法,则不会如注释所示。正如我今天发现的,我也可以使用ASCII方法,并执行数字-49。我也可以反转此函数吗?我从数字中生成字母(而不是从字母中生成数字)?也许吧。要克服的一个问题是知道一个数字串是应该转换成ASCII码,还是不转换。我不知道你是怎么知道的,但也许你能想出一些办法。祝你好运。正如我今天发现的那样,我也可以使用ASCII方法并使用数字-49。我也可以反转这个函数吗?我从数字中生成字母(而不是从字母中生成数字)?也许吧。要克服的一个问题是知道一个数字串是应该转换成ASCII码,还是不转换。我不知道你是怎么知道的,但也许你能想出一些办法。祝你好运。