pl/sql 关于变量定义的问题
来源:互联网 发布:免费下载迅雷软件 编辑:程序博客网 时间:2024/04/29 20:03
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变量定义规则
- Oracle定义PL/SQL变量
- ORACLE定义PL/SQL变量
- sql 定义变量的问题
- PL/SQL中,declare定义变量和variable定义变量的区别?
- PL/SQL学习笔记#01 -- 变量定义
- pl/sql 基础---定义并使用变量!
- PL/SQL简单语句块,变量定义
- 关于PL/SQL的一个问题
- 关于pl sql 连接oracle的问题。
- 关于PL、sql配置出现的问题
- 关于Action里面定义的变量问题
- PL/SQL Developer插件编程的绑定变量问题
- 关于变量的定义
- 关于变量的定义
- PL/SQL编程整理2 -- 定义或使用变量
- Oracle笔记 六、PL/SQL简单语句块、变量定义
- Android摇一摇
- Linux改变语言设置的命令
- acm--找出n之内的所有完数及因子
- Log4Net使用指南
- 内存篇之栈溢出
- pl/sql 关于变量定义的问题
- 查询表被其他表索引
- 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据
- Android Studio添加字体解决方案
- tiny-blog项目设计介绍(一个基于LAMP架构的轻量级博客系统)
- jQuery 中的 HTML 操作
- 创建eclipse视图
- Vim简明教程【CoolShell】
- Android连续点击两次Back键退出程序