什么:
value_1 INTEGER(5);
Run Code Online (Sandbox Code Playgroud)
意思 ?
我明白这value_1是一个整数,但5 在声明中意味着什么?
我首先创建一个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)我创建了上述对象的嵌套表类型.
CREATE TYPE address_table AS TABLE OF ADDRESS_TYPE;
/
Run Code Online (Sandbox Code Playgroud)然后我创建另一个对象如下:
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)然后我创建一个嵌套表类型如下:
CREATE TYPE telephone_number_table AS TABLE OF TELEPHONE_NUMBER_TYPE;
/
Run Code Online (Sandbox Code Playgroud)现在我创建一个名为的表person.除了telephone_numbers嵌套表telephone_number_table类型的列之外,其中许多列在此问题中没有多大用处.
CREATE …Run Code Online (Sandbox Code Playgroud)我需要构建一个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) oracle数字格式精度包括符号吗?
Oracle NUMBER(3)是从-999到999还是从-99到99?
符号是否算作精度值中的数字?
我创建了一个程序如下
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:语句被忽略"
这是我创建的确切过程,参数是正确的.
我究竟如何申报标识符?
提前致谢.
我必须编写一个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)
失败并给我以下错误消息: …
我正在尝试编写一个可以通过切换字符对来解码消息的函数.
假设我message hello!在编码时变成了ehll!o.是否有一个现有的功能Oracle,让我replace characters在指定的位置与我选择的其他角色?
我有一个varchar(50)行,它有一个唯一约束,我想得到一个新插入的下一个唯一编号但是有一个给定的前缀.
我的行看起来像这样:
ID (varchar)
00010001
00010002
00010003
00080001
Run Code Online (Sandbox Code Playgroud)
因此,如果我想从前缀"0001"获得下一个unqiue号码,那么它将是"00010004",但如果我希望它为前缀"0008",那么它将是"00080002".
此表中将有超过1百万个条目.有没有办法让Oracle 11执行相当快的这种操作?
我知道这个设置完全是疯了但这是我必须要处理的.我不能创建任何新表等.
我有A.FIELD哪些输出以下格式:
9:30AM - 12:50PM AbCdEfGhIj XY-000
Run Code Online (Sandbox Code Playgroud)
我试图找出一种方法来获得基于指定分隔符的每个单独的值.
:(例如:9)-或2个空,而2日前:(例如:12)9:30AM - 12:50PM)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?