| 类型 | 符号 | 说明 |
| 赋值运算符 | := | Java 和 C# 中都是等号,PL/SQL 的赋值是 := |
| 特殊字符 | || | 字符串连接操作符 |
| -- | PL/SQL 中的单行注释 | |
| /*,*/ | PL/SQL 中的多行注释,多行注释不能嵌套。 | |
| <<,>> | 标签分隔符,只为了标识程序特殊位置。 | |
| .. | 范围操作符,比如 1..5 标识从 1 到 5 | |
| 算术运算符 | +,-,*,/ | 基本算术运算符 |
| ** | 求幂操作,比如:3**2=9 | |
| 关系运算符 | >,<,>=,<=,= | 基本关系运算符,=表示相等关系,不是赋值。 |
| <>,!= | 不等关系 | |
| 逻辑运算符 | AND,OR,NOT | 逻辑运算符 |
1)PL/SQL块中变量使用前必须先定义,变量必须定义在DECLARE块中。
2)PL/SQL支持 SQL 中的数据类型,PL/SQL 中正常支持 NUMBER、VARCHAR2、DATE 等 Oracle SQL 数据类型。
3)声明变量必须指明变量的数据类型,也可以声明变量时对变量初始化,变量声明必须在声明部分。声明变量的语法是:
语法格式:声明变量
变量名 数据类型[:=初始值]
DECLARE
sname VARCHAR2(20) := 'jerry';
BEGIN
sname:=sname||' and tom';
dbms_output.put_line(sname);
END;
4)可以通过SELECT……INTO语句为变量赋值:
• 语句从数据库中查询数据对变量进行赋值。
• 查询的结果只能是一行记录,不能是零行或者多行记录。
declare
v_name varchar2(20);
begin
select ename into v_name from emp where empno='1001';
dbms_output.put_line(v_name);
exception
when others then
dbms_output.put_line('异常');
end;
PL/SQL是强类型的语言,使用变量时必须指定变量的数据类型。PL/SQL常见的数据类型有:
• varchar2(length)
• number(n[,m])
• date/timestamp
• long 变长大字符串类型
• boolean 逻辑类型 注意:Oracle SQL 中没有 boolean 类型
• %rowtype 引用数据库表中一行作为数据类型
• %type 引用某一个变量或者数据库表中某一列的类型作为当前变量的类型
1)%rowtype和%type称之为属性类型:
• 可以使用%type和%rowtype来声明变量,而不必指定特定的数据类型。
• 这两个属性提供了这种方式:在声明变量时,不指定变量的数据类型,而由表/视图列来定义变量。
2)rowtype类型使用:
declare
myemp emp%rowtype;
begin
select * into myemp from emp where empno='1001';
dbms_output.put_line(myemp.ename);
exception
when others then
dbms_output.put_line('异常');
end;
3)type类型使用:
declare
v_name emp.ename%type;
begin
select ename into v_name from emp where empno='1001';
dbms_output.put_line(v_name);
exception
when others then
dbms_output.put_line('异常');
end;
1)Record类型
该类型可以存储由多个列值组成的一行数据。当使用记录类型的变量时,首先需要定义记录的结构,然后再定义记录类型的变量。我们使用 type 关键字来定义记录类型,其语法为:
type 记录类型名 is record
(
变量1 数据类型,
变量2 数据类型,
……
变量n 数据类型
);
2)Record类型使用:
declare
type emp_type is record
(
empno emp.empno%type,
ename emp.ename%type
);
v_emp emp_type;
begin
select empno,ename into v_emp from emp where empno='1001';
dbms_output.put_line(v_emp.empno || '-' || v_emp.ename);
exception
when others then
dbms_output.put_line('异常');
end;
我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
我不确定传递给方法的对象的类型是否正确。我可能会将一个字符串传递给一个只能处理整数的函数。某种运行时保证怎么样?我看不到比以下更好的选择:defsomeFixNumMangler(input)raise"wrongtype:integerrequired"unlessinput.class==FixNumother_stuffend有更好的选择吗? 最佳答案 使用Kernel#Integer在使用之前转换输入的方法。当无法以任何合理的方式将输入转换为整数时,它将引发ArgumentError。defmy_method(number)
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。
我正在编写一个简单的静态Rack应用程序。查看下面的config.ru代码:useRack::Static,:urls=>["/elements","/img","/pages","/users","/css","/js"],:root=>"archive"map'/'dorunProc.new{|env|[200,{'Content-Type'=>'text/html','Cache-Control'=>'public,max-age=6400'},File.open('archive/splash.html',File::RDONLY)]}endmap'/pages/search.