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 关于变量定义的问题的更多相关文章

  1. pl/sql基础知识—定义并使用变量

    n  介绍 在编写pl/sql程序是,可以定义变量和常量:在pl/sql程序中包括有: ①标量类型(scalar) ②复合类型(composite) ③参照类型(reference) ④lob(lar ...

  2. PL/SQL之--变量

    一.PL/SQL 简介 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是oracle对sql语句的一种扩展,在普通SQL语句的使用上 ...

  3. PL/SQL编程—变量

    SQL> declare c_tax_rate ,):=0.03; v_name ); v_passwd ); v_sale ,); v_tax_sale ,); begin select na ...

  4. 基于oracle 的PL/SQL编程 -变量使用

    1. 需要开启的服务:  本机安装的oracle ,默认是开机启动服务的,开机时间太慢,关闭了,需要手动打开: OracleDBConsoleorcl OracleOraDb10g_home1iSQL ...

  5. sql语句变量定义和样例

    变量和与常量 1.定义和使用局部变量说明:局部变量是用户可自定义的变量,它的作用范围仅在程序内部.局部变量的名称是用户自定义的,命名的局部变量名要符合SQL Server 2000标识符命名规则,必须 ...

  6. SQL Server 变量定义

    declare @id intdeclare @name char(10) --注意:char(10)为10位,要是位数小了会让数据出错set @id=1 set @name='sssss'selec ...

  7. SQL 将变量定义为Table类型

    ),a2 ,),a4 DATETIME,a5 UNIQUEIDENTIFIER) ,11.22,GETDATE(),NEWID()) ,11.22,GETDATE(),NEWID()) ,11.22, ...

  8. PL/SQL编程--变量声明及赋值

    declare v_price ,);--单价 v_usenum number;--水费字数 v_usenum2 number;--使用吨数 begin v_price:=2.45;--每吨单价 v_ ...

  9. 二十四、oracle pl/sql 变量

    一.变量介绍在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有:1).标量类型(scalar)2).复合类型(composite) --用于操作单条记录3).参照类型(refer ...

随机推荐

  1. javascript中强制类型转换

    javascript开发过程中,强制类型转换一般发生在条件判断和==运算符.其他情况,发生的类型转换(与这两种情况也是基本类似,属于万变不离其宗的范畴),暂不讨论. == 双等运算符 考虑代码: a ...

  2. c#获取远程图片的方法

    public static int SaveImageFromWeb(string imgUrl, string path) { var aaa = Environment.CurrentDirect ...

  3. skip-grant-tables

    1.net stop mysql 2.my.ini中[mysqld]plugin_dir的下面增加skip-grant-tables 3.net start mysql 4.在Navicat中打开my ...

  4. webrtc学习———记录三:mediaStreamTrack

    参考: https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack 转自http://c.tieba.baidu.com/p/3 ...

  5. enableEventValidation

    回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEve ...

  6. ASCII 码表对照 2

    http://www.asciima.com/ ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的 ...

  7. HTML中的API

    在程序语言里面就使用API这个行为来讲,可拆解为两个操作:取得API接口和运行API功能 例如:书本具有传授知识的功能,这里就好比一个API,学生拿出某个课本学习,就相当于取得API,学习通过课本学习 ...

  8. HTML基础(2) 格式标签 文本标签

    格式标签: 1.<p></p>  用来显示段落 2.<br> 控制换行 3.<nobr> </nobr> 防止浏览器将过长内容自动换行显示 ...

  9. Oracle计算时间函数(numtodsinterval、numtoyminterval)

    numtodsinterval(<x>,<c>) ,x是一个数字,c是一个字符串,表明x的单位,这个函数把x转为interval day to second数据类型 常用的单位 ...

  10. How to hanganalyze and systemstate dumps

    Oracle support request hang analysis and system state dumps when rasing SR. One 10.1 or higher versi ...