pl/sql 关于变量定义的问题
1.
create or replace procedure test_prc(p_data_dt in date) IS
e_name emp.ename%type;
begin
select ename into e_name
from emp where hiredate =p_data_dt;
DBMS_OUTPUT.PUT_LINE(e_name || '---' ||p_data_dt);
end;
此时输入的是日期型的参数:
SQL> call test_prc(date'1980-12-17');
SMITH---17-DEC-80
Call completed.
---------------------------------------------------------------------
2.
create or replace procedure test_prc(p_data_dt in VARCHAR) IS
e_name emp.ename%type;
v_data_dt DATE :=to_date(p_data_dt,'YYYY-MM-DD');
begin
select ename into e_name
from emp where hiredate =v_data_dt;
DBMS_OUTPUT.PUT_LINE(e_name || '---' ||v_data_dt);
end;
SQL> call test_prc('1980-12-17');
SMITH---17-DEC-80
Call completed.
-------------------------------------------------------------------
3.
create or replace procedure test_prc(p_data_dt in VARCHAR) IS
e_name emp.ename%type;
begin
select ename into e_name
from emp where hiredate =to_date(P_data_dt,'yyyy-mm-dd');
DBMS_OUTPUT.PUT_LINE(e_name || '---' ||P_data_dt);
end;
SQL> exec test_prc('1980-12-17');
SMITH---1980-12-17
PL/SQL procedure successfully completed.
4.
create or replace procedure test_prc(p_data_dt in VARCHAR) IS
org dwm.debit_card_org.card_open_org%type;
begin
select dwm.debit_card_org.card_open_org into org
from dwm.debit_card_org where data_dt =to_date(P_data_dt,'yyyy-mm-dd')
and rownum<2;
DBMS_OUTPUT.PUT_LINE(org || '---' ||P_data_dt);
end;
exec test_prc(2013-01-01);
SQL> exec test_prc(2013-01-01);
BEGIN test_prc(2013-01-01); END;
*
ERROR at line 1:
ORA-01840: input value not long enough for date format
ORA-06512: at "DWM.TEST_PRC", line 4
ORA-06512: at line 1
exec test_prc('2013-01-01');
---------------------------------------------------------------------------------------
5.
create or replace procedure test_prc(p_data_dt VARCHAR2) IS
org dwm.debit_card_org.card_open_org%type;
begin
select dwm.debit_card_org.card_open_org into org
from dwm.debit_card_org where data_dt =to_date(P_data_dt,'yyyy-mm-dd')
and rownum<2;
DBMS_OUTPUT.PUT_LINE(org || '---' ||P_data_dt);
end;
----------------------------------------------------------------
6.
create or replace procedure test_prc(p_data_dt in NUMBER) IS
e_name emp.ename%type;
v_data_dt DATE :=to_date(p_data_dt,'YYYY-MM-DD');
begin
select ename into e_name
from emp where hiredate =v_data_dt;
DBMS_OUTPUT.PUT_LINE(e_name || '---' ||v_data_dt);
end;
SQL> exec test_prc(19801217);
PL/SQL procedure successfully completed.
SQL> set serveroutput
SP2-0265: serveroutput must be set ON or OFF
SQL> set serveroutput on
SQL> exec test_prc(19801217);
SMITH---17-DEC-80
PL/SQL procedure successfully completed.
7.
SQL> create table test_2(id int,data_dt DATE);
Table created.
SQL> insert into test_2 values(1,to_date(20130101,'yyyymmdd'));
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test_2;
ID DATA_DT
---------- ---------
1 01-JAN-13
create or replace procedure test_prc(p_data_dt in VARCHAR) IS
ID test_2.ID%type;
begin
select ID into ID
from test_2 where data_dt =to_date(p_data_dt,'yyyymmdd');
DBMS_OUTPUT.PUT_LINE(ID || '---' ||p_data_dt);
end;
SQL> exec test_prc(20130101);
1---20130101
PL/SQL procedure successfully completed.
SQL> exec test_prc('20130101');
1---20130101
PL/SQL procedure successfully completed.
SQL> exec test_prc(2013-01-01);
BEGIN test_prc(2013-01-01); END;
*
ERROR at line 1:
ORA-01840: input value not long enough for date format
ORA-06512: at "SCOTT.TEST_PRC", line 5
ORA-06512: at line 1
SQL> exec test_prc('2013-01-01');
BEGIN test_prc('2013-01-01'); END;
*
ERROR at line 1:
ORA-01843: not a valid month
ORA-06512: at "SCOTT.TEST_PRC", line 5
ORA-06512: at line 1
8.
create or replace procedure test_prc(p_data_dt in VARCHAR) IS
ID test_2.ID%type;
begin
select ID into ID
from test_2 where data_dt =to_date(p_data_dt,'yyyy-mm-dd');
DBMS_OUTPUT.PUT_LINE(ID || '---' ||p_data_dt);
end;
SQL> exec test_prc(2013-01-01);
BEGIN test_prc(2013-01-01); END;
*
ERROR at line 1:
ORA-01840: input value not long enough for date format
ORA-06512: at "SCOTT.TEST_PRC", line 5
ORA-06512: at line 1
SQL> exec test_prc('2013-01-01');
1---2013-01-01
PL/SQL procedure successfully completed.
9.
create or replace procedure test_prc(p_data_dt in VARCHAR) IS
ID test_2.ID%type;
begin
/*select ID into ID
from test_2 where data_dt =to_date(p_data_dt,'yyyy-mm-dd'); */
DBMS_OUTPUT.PUT_LINE(ID || '---' ||p_data_dt);
end;
SQL> exec test_prc('2013-01-01');
---2013-01-01
PL/SQL procedure successfully completed.
SQL> exec test_prc(2013-01-01);
---2011
PL/SQL procedure successfully completed.
但是在PL/SQL工具里可以直接选择字符窜,就不会出现这种问题,如下图:
pl/sql 关于变量定义的问题的更多相关文章
- pl/sql基础知识—定义并使用变量
n 介绍 在编写pl/sql程序是,可以定义变量和常量:在pl/sql程序中包括有: ①标量类型(scalar) ②复合类型(composite) ③参照类型(reference) ④lob(lar ...
- PL/SQL之--变量
一.PL/SQL 简介 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是oracle对sql语句的一种扩展,在普通SQL语句的使用上 ...
- PL/SQL编程—变量
SQL> declare c_tax_rate ,):=0.03; v_name ); v_passwd ); v_sale ,); v_tax_sale ,); begin select na ...
- 基于oracle 的PL/SQL编程 -变量使用
1. 需要开启的服务: 本机安装的oracle ,默认是开机启动服务的,开机时间太慢,关闭了,需要手动打开: OracleDBConsoleorcl OracleOraDb10g_home1iSQL ...
- sql语句变量定义和样例
变量和与常量 1.定义和使用局部变量说明:局部变量是用户可自定义的变量,它的作用范围仅在程序内部.局部变量的名称是用户自定义的,命名的局部变量名要符合SQL Server 2000标识符命名规则,必须 ...
- SQL Server 变量定义
declare @id intdeclare @name char(10) --注意:char(10)为10位,要是位数小了会让数据出错set @id=1 set @name='sssss'selec ...
- SQL 将变量定义为Table类型
),a2 ,),a4 DATETIME,a5 UNIQUEIDENTIFIER) ,11.22,GETDATE(),NEWID()) ,11.22,GETDATE(),NEWID()) ,11.22, ...
- PL/SQL编程--变量声明及赋值
declare v_price ,);--单价 v_usenum number;--水费字数 v_usenum2 number;--使用吨数 begin v_price:=2.45;--每吨单价 v_ ...
- 二十四、oracle pl/sql 变量
一.变量介绍在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有:1).标量类型(scalar)2).复合类型(composite) --用于操作单条记录3).参照类型(refer ...
随机推荐
- Android(java)学习笔记172:BroadcastReceiver之 Android广播机制
Android广播机制 android系统中有各式各样的广播,各种广播在Android系统中运行,当"系统/应用"程序运行时便会向Android注册各种广播.Android接收到广 ...
- Android(java)学习笔记178:BroadcastReceiver之 自定义广播
广播使用: 电台:对外发送信号.---------电台发送广播(可以自定义) 收音机:接收电台的信号.-----广播接收者 这里,我们就说明自定 ...
- ubuntu16.04 : 4: [: y: unexpected operator
Ubuntu16.04 执行行脚本出错 在使用sh 执行脚本 出错标志 : 4: [: y: unexpected operator 原因:sh是连接到dash的,又因为dash跟bash的不兼容所以 ...
- POSIX字符类型
[:alnum:] 字母与数字 [:alpha:] 字母 [:blank:] 空格与制表符 [:cntrl:] 控制字符 [:digit:] 数字 [:graph:] 可打印的与可见的(不包括空格)字 ...
- 项目打包 weblogic部署
工作流打包: 由于没有集成单点,配置文件要修改 将webnocas.xml内容复制覆盖 web.xml 到这里修改完毕 选择weblogic项目,右键maven install,生成.ear文 ...
- build/envsetup.sh中hmm、get_abs_build_var、get_build_var解析
function hmm() { # 打印帮助信息 cat <<EOF Invoke ". build/envsetup.sh" from your shell to ...
- PHP程序漏洞产生的原因和防范方法
滥用include 1.漏洞原因: Include是编写PHP网站中最常用的函数,并且支持相对路径.有很多PHP脚本直接把某输入变量作为Include的参数,造成任意引用脚本.绝对路径泄露等漏洞.看以 ...
- 前端开发bower包管理器
Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,他可以很好的帮助你帮你解决js的依赖管理,比如jquery angular bootstrap 等等. 可以很方便的 ...
- 中文翻译:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介
1:pjsip教程(一)之PJNATH简介 2:pjsip教程(二)之ICE穿越打洞:Interactive Connectivity Establishment简介 3:pjsip教程(三)之ICE ...
- Codeforces 553D Nudist Beach(图论,贪心)
Solution: 假设已经选了所有的点. 如果从中删掉一个点,那么其它所有点的分值只可能减少或者不变. 如果要使若干步删除后最小的分值变大,那么删掉的点集中肯定要包含当前分值最小的点. 所以每次删掉 ...