标签: plsql

INTEGER括号内的数字表示什么?

什么:

value_1 INTEGER(5);
Run Code Online (Sandbox Code Playgroud)

意思 ?

我明白这value_1是一个整数,但5 在声明中意味着什么?

sql oracle plsql oracle11g

2
推荐指数
1
解决办法
764
查看次数

Oracle包中的最大行数

谁能告诉我Oracle包中的最大行数?Oracle建议什么?什么是编程可能的?

oracle plsql package

2
推荐指数
1
解决办法
4503
查看次数

在PL/SQL块中的SQL中使用嵌套表变量/集合

  1. 我首先创建一个address_type对象

    CREATE TYPE address_type AS OBJECT
    ( line1                         VARCHAR2(100)
    , line2                         VARCHAR2(100)
    , line3                         VARCHAR2(100)
    , city                          VARCHAR2(50)
    , state                         VARCHAR2(50)
    , country                       VARCHAR2(50)
    , zip                           VARCHAR2(10)
    );
    /
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我创建了上述对象的嵌套表类型.

    CREATE TYPE address_table AS TABLE OF ADDRESS_TYPE;
    /
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后我创建另一个对象如下:

    CREATE TYPE telephone_number_type AS OBJECT
    ( country_code                  VARCHAR2(4)
    , area_code                     VARCHAR2(10)
    , phone_number                  VARCHAR2(10)
    , extension                     VARCHAR2(10)
    , number_type                   VARCHAR2(10)
    );
    /
    
    Run Code Online (Sandbox Code Playgroud)
  4. 然后我创建一个嵌套表类型如下:

    CREATE TYPE telephone_number_table AS TABLE OF TELEPHONE_NUMBER_TYPE;
    /
    
    Run Code Online (Sandbox Code Playgroud)
  5. 现在我创建一个名为的表person.除了telephone_numbers嵌套表telephone_number_table类型的列之外,其中许多列在此问题中没有多大用处.

    CREATE …
    Run Code Online (Sandbox Code Playgroud)

oracle plsql nested-table

2
推荐指数
1
解决办法
7411
查看次数

存储过程算法需要9个小时 - 更好的方法吗?

我需要构建一个SQL存储过程,它基本上使用ID更新现有的表(大约150,000行).

此存储过程将运行的表基本上是人员列表,他们的名字,地址等.

现在该人的id的算法如下: - 取得人名的前4个字符. - 接受姓氏的前2个字符. - 用0表示填充其余部分,最后用计数编号,直到该字段为8个字符.

例如,名称JOHN SMITH的ID为"JOHNSM00".如果有2个JOHN SMITH,那么下一个人的ID就是JOHNSM01.例如,如果人名是FI LYNN,则ID将为FILY0000.

我已经编写了以下存储过程,但运行大约需要9个小时!有没有更好的办法让我失踪?

ALTER PROCEDURE [dbo].[LM_SP_UPDATE_PERSON_CODES]
AS

DECLARE @NAMEKEY NVARCHAR(10)
DECLARE @NEWNAMEKEY NVARCHAR(10)
DECLARE @LENGTH INT
DECLARE @KEYCOUNT INT
DECLARE @I INT
DECLARE @PADDING NVARCHAR(8)
DECLARE @PERSONS CURSOR
DECLARE @FIRSTNAME NVARCHAR(30)
DECLARE @LASTNAME NVARCHAR(30)

SET @PADDING = '00000000'
--FIRST CLEAR OLD NEW NAMEKEYS IF ANY EXIST
UPDATE LM_T_PERSONS SET NEW_NAMEKEY = NULL
SET @PERSONS = CURSOR FOR
SELECT NAMEKEY, NAME_2, NAME_1 FROM LM_T_PERSONS

OPEN @PERSONS
FETCH NEXT FROM @PERSONS …
Run Code Online (Sandbox Code Playgroud)

sql sql-server plsql stored-procedures

2
推荐指数
1
解决办法
661
查看次数

Oracle NUMBER(3)= -999到999或-99到99(是精度的标志部分)?

oracle数字格式精度包括符号吗?

Oracle NUMBER(3)是从-999到999还是从-99到99?

符号是否算作精度值中的数字?

oracle plsql

2
推荐指数
1
解决办法
252
查看次数

如何调用plsql程序

我创建了一个程序如下

 create or replace procedure "GETCUSTNAMEZZz"
(cust_identifier1 IN NVARCHAR2(10))
is
begin
DBMS_OUTPUT.PUT_LINE (FNAME || ' ' || LNAME FROM customer WHERE  cust_id=cust_identifier1)
end;
Run Code Online (Sandbox Code Playgroud)

然后我尝试调用该过程

BEGIN

GETCUSTNAMEZZz('C2')  ;  


END;
Run Code Online (Sandbox Code Playgroud)

这个sql给出了一个错误,标识符'GETCUSTNAMEZZZ'必须声明为ORA-06550:第3行,第5列:PL/SQL:语句被忽略"

这是我创建的确切过程,参数是正确的.

我究竟如何申报标识符?

提前致谢.

oracle plsql procedure

2
推荐指数
1
解决办法
294
查看次数

PL/SQL函数返回ORA-06503:PL/SQL:返回没有值的函数

我必须编写一个pl/sql代码(实际上是一个函数),它通过将郊区作为参数来返回邮政编码,代码如下:

create or replace 
FUNCTION get_postCode(p_suburb IN varchar2)
RETURN varchar2 
IS
--
v_postcode varchar2;
--
CURSOR c1 IS 
SELECT locality, postcode FROM table_postcode;
--
BEGIN
--
FOR r1 IN c1 
loop
    IF upper(r1.locality) = upper(p_suburb)
    THEN 
      v_postcode := r1.postcode;
      return v_postcode;
    END IF;
exit WHEN c1%notfound;
END loop;
-- return v_postcode;
--
exception WHEN others then
v_postcode := null;  
END; 
Run Code Online (Sandbox Code Playgroud)

table_postcode是从邮局获得的,它包含郊区(地点作为栏目中的列)和邮政编码以及与此案例无关的其他字段.

当我使用该函数时,它返回正确的值,当我使用此函数作为SELECT子句的列时,它返回ONLY如果我不在FROM子句后添加任何进一步的子句.这对我来说很奇怪.

情况是:

select street, suburb, get_postcode(suburb) from my_table;
Run Code Online (Sandbox Code Playgroud)

上面的行给了我结果但是

select street, subur, get_postcode(suburb) from my_table order by suburb;
Run Code Online (Sandbox Code Playgroud)

失败并给我以下错误消息: …

sql database oracle select plsql

2
推荐指数
1
解决办法
2万
查看次数

替换Oracle中字符串中特定位置的字符

我正在尝试编写一个可以通过切换字符对来解码消息的函数.

假设我message hello!在编码时变成了ehll!o.是否有一个现有的功能Oracle,让我replace characters在指定的位置与我选择的其他角色?

string oracle plsql replace substring

2
推荐指数
1
解决办法
6449
查看次数

在Oracle中查找varchar的下一个id

我有一个varchar(50)行,它有一个唯一约束,我想得到一个新插入的下一个唯一编号但是有一个给定的前缀.

我的行看起来像这样:

ID (varchar)
00010001
00010002
00010003
00080001
Run Code Online (Sandbox Code Playgroud)

因此,如果我想从前缀"0001"获得下一个unqiue号码,那么它将是"00010004",但如果我希望它为前缀"0008",那么它将是"00080002".

此表中将有超过1百万个条目.有没有办法让Oracle 11执行相当快的这种操作?

我知道这个设置完全是疯了但这是我必须要处理的.我不能创建任何新表等.

oracle plsql

2
推荐指数
1
解决办法
631
查看次数

在Oracle中使用REGEXP_SUBSTR作为拆分

我有A.FIELD哪些输出以下格式:

9:30AM - 12:50PM AbCdEfGhIj XY-000
Run Code Online (Sandbox Code Playgroud)

我试图找出一种方法来获得基于指定分隔符的每个单独的值.

  1. 前一日所有整数:(例如:9)
  2. 1日之后所有的整数-或2个空,而2日前:(例如:12)
  3. 前3空间中的所有字符(例如:9:30AM - 12:50PM)
  4. 最后一个空间之前和之后2日至最后一个空格字符的所有(例如:AbCdEfGhIj)

现在我能够得到以下内容:

REGEXP_SUBSTR(A.FIELD, '\S*$')                        -- XY-000
REGEXP_SUBSTR(A.UP_CLASS_MEETINGS, '[^ ]+', 1)        -- 9:30AM
Run Code Online (Sandbox Code Playgroud)

我的第二个例子是获得9:30AM最好的方法吗?它有缺陷吗?

我怎样才能最好地利用SUBSTR,INSTR和/或REGEXP_SUBSTR?

regex sql oracle plsql substr

2
推荐指数
1
解决办法
3万
查看次数