2007年8月1日
PL/SQL -- 塊結(jié)構(gòu)語言
塊的語法如下:
DECLARE
/* declarative section */ --可選(變量/游標(biāo)定義/過程函數(shù)的聲明)
BEGIN
/* executable section */ --必須(PL/SQL語句)
EXCEPTION
/* exception section */ --可選
END;
用戶自定義的數(shù)據(jù)類型:
DECLARE
TYPE t_AddrRecord IS RECORD (
Province VARCHAR2(10),
City VARCHAR2(10),
Stree VARCHAR2(10),
Telephone NUMBER(12)
);
v_Address t_AddrRecord; --聲明一個用戶自定義數(shù)據(jù)類型的變量
游標(biāo)是用來處理使用SELECT語句從數(shù)據(jù)庫中檢索到的多行記錄的工具.借助于游標(biāo)的功能,數(shù)據(jù)庫應(yīng)用程序可以對一組記錄逐個進(jìn)行處理,每次處理一行記錄.
過程和函數(shù)的區(qū)別是過程沒有返回值,而函數(shù)是有返回值的.
PL/SQL提供了三種不同的集合類型:按表索引,嵌套表和可變長數(shù)組
ORACLE內(nèi)置包:
DBMS_OUTPUT包,UTL_FILE包,TEXT_TO包能夠?qū)崿F(xiàn)輸入輸出操作,包括屏幕輸出,文件讀寫等操作.
DBMS_ALERT包能夠?qū)崿F(xiàn)數(shù)據(jù)庫報警
DBMS_PIPE可以管理數(shù)據(jù)庫通道
DBMS_AQADM用于管理高級隊列的配置及其相應(yīng)信息
DBMS_JOB能夠?qū)崿F(xiàn)任務(wù)調(diào)度服務(wù)及數(shù)據(jù)庫作業(yè)管理
DBMS_LOB能夠?qū)崿F(xiàn)對大型對象的操作.
windows版本ruby下載路徑:
http://rubyinstaller.rubyforge.org/
gem 命令包含很多子命令和相應(yīng)的選項,比如:
gem -h/--help – 顯示 rubygem 的幫助
gem -v/--version – 顯示rubygem 的版本號
gem list –local – 用子命令 list 列出本地安裝的 gems
安裝rails:
gem install rails –remote
這條命令顯式地從遠(yuǎn)程服務(wù)器上安裝 rails ,你也可以運行 gem install rails 來安裝, gem 會判斷本地是否安裝了rails ,由此來決定是否從遠(yuǎn)程安裝 rails.
一般來說,安裝 rails 需要的包有 rake (這是類似 java ant 的 build 程序), activerecord(rails 依賴的 orm 工具,也就是 MVC中的Model 模塊),actionpack (對應(yīng)的 controller 模塊)。 你可能會問那么相應(yīng)的 view 模塊怎么沒有安裝,因為 view 模塊已經(jīng)在默認(rèn)的 ruby 安裝中包含了,就是 eruby, 它的作用就是完成對模板文件 .rhtml 的解釋。
創(chuàng)建空的 rails 網(wǎng)頁應(yīng)用程序骨架:
D:\railsdoc>rails mybook
控制臺輸出:
create
create app/apis
create app/controllers
create app/helpers
create app/models
create app/views/layouts
create config/environments
create components
create db
create doc
create lib
create log
create public/images
create public/javascripts
create public/stylesheets
create script
create test/fixtures
create test/functional
create test/mocks/development
create test/mocks/test
create test/unit
create vendor
create Rakefile
create README
create CHANGELOG
create app/controllers/application.rb
create app/helpers/application_helper.rb
create test/test_helper.rb
create config/database.yml
create config/routes.rb
create public/.htaccess
create config/environment.rb
create config/environments/production.rb
create config/environments/development.rb
create config/environments/test.rb
create script/console
create script/console_sandbox
create script/destroy
create script/generate
create script/server
create script/runner
create script/benchmarker
create script/profiler
create script/breakpointer
create public/dispatch.rb
create public/dispatch.cgi
create public/dispatch.fcgi
create public/404.html
create public/500.html
create public/index.html
create public/favicon.ico
create public/javascripts/prototype.js
create doc/README_FOR_APP
create log/server.log
create log/production.log
create log/development.log
create log/test.log
Rails 開發(fā)的方式是: 由 rails 來生成默認(rèn)的應(yīng)用程序骨架,你所做的工作就是在默認(rèn)目錄結(jié)構(gòu)中編輯文件增加應(yīng)用程序邏輯就可以了。
啟動webrick 服務(wù)器:
D:\railsdoc\mybook>ruby script\server
運行程序:
打開瀏覽器 ,輸入網(wǎng)址http://127.0.0.1:3000/
Rails 開發(fā)工作的大部分集中在創(chuàng)建和編輯 apps 目錄下的文件
Apps 目錄下包含四個主要目錄,它們分別是:
1:Controllers 目錄存放 rails 應(yīng)用中相應(yīng)的 controller 類,controller 類處理來自用戶的 web 請求。
2:views 目錄存放相應(yīng)的模板文件,模板文件填充數(shù)據(jù)后,轉(zhuǎn)換為 html 格式傳遞給用戶的瀏覽器。
3:models目錄存放數(shù)據(jù)模型類,模型類封裝了數(shù)據(jù)庫中的數(shù)據(jù)。很多框架在數(shù)據(jù)模型層都做的比較復(fù)雜,用過 rails 后,你會發(fā)現(xiàn)它非常容易使用。
4:helpers 目錄存放了簡化 Controllers, models, views 使用的幫助類。
運行 ruby script\generate controller MyTest
D:\railsdoc\mybook\app\controllers 目錄中將生成一個包含 MyTestController 類定義骨架的名為 my_test_controller.rb 的文件
這里需要做一些解釋,在運行 ruby script\generate controller MyTest 的時候, rails 做了一些默認(rèn)的假設(shè)。 MyTest 對應(yīng)的 controller 文件是 my_test_controller.rb, 文件中控制器類名是 MyTestController,而 url 映射是 /My_Test/ .
在編輯完 controller 后,重新刷新頁面,就可以使程序生效。對于編譯型的 java 語言來說,不重新編譯,重新啟動服務(wù)器是無法做到這點的
新建數(shù)據(jù)庫表 books
id int(11) 主鍵
title varchar(100)
description text
buydate date
告訴 rails 如何找到數(shù)據(jù)庫信息,打開 D:\railsdoc\mybook\config 目錄,編輯 database.yml 配置文件
如何將ruby對象保存到 yaml 文件中.
參考文檔: http://www.ruby-doc.org/core/classes/YAML.html
require ‘yaml’
tree = { :name => ‘ruby’,
:uses => [‘script’,’web’,’testing’,’etc’]
}
File.open(“tree.yaml”,”w”) {|f| YAML.dump(tree,f)}
如何在 ruby 程序中讀取 yaml 文件。
require ‘yaml’
tree = YAML.load(File.open(“tree.yaml”)
tree[:uses][1]
輸出結(jié)果: “web”
下面就是個例子:
conf/config.yaml 文件內(nèi)容如下:
host: 127.0.0.1
prefs:
username: mulder
password: trustno1
filename: xfiles
我們可以在ruby 中這樣使用它
require ‘yaml’
config = YAML.load(File.open(“conf/config.yaml”))
config[“host”] -- 輸出結(jié)果 “127.0.0.1”
config[“prefs”][“password”] -- 輸出結(jié)果 “trustno1”
由于重新定義了數(shù)據(jù)庫配置,需要重新啟動 webrick 服務(wù)器才能讓 rails 找到數(shù)據(jù)庫配置信息。
用rails生成Model類Book的骨架文件book.rb,如下:
運行 ruby script\generate model book
book.rb:
class Book < ActiveRecord::Base
在這里 Rails 將數(shù)據(jù)庫中的books 表映射到 Book 類。 這里 Rails 再次使用了習(xí)慣約定,那就是數(shù)據(jù)庫表以復(fù)數(shù)形式命名,而與之對應(yīng)的 Model 類,使用單數(shù)形式。這里 rails 非常智能,它理解英文的復(fù)數(shù)規(guī)則
運行 ruby script\generate controller book 生成 controller 骨架文件 book_controller.rb。
class BookController < ApplicationController
scaffold :book
end
scaffold :book – 這句是你惟一需要寫的代碼,它生成了數(shù)據(jù)庫表對應(yīng)的 CRUD 操作,而且令人激動的是它生成了對應(yīng)的視圖模板文件。
我們重新編輯 book_controller.rb 文件
class BookController < ApplicationController
scaffold :book
def list
@books = Book.find_all
end
end
這里我們需要自己寫一個 list.rhtml
代碼如下:
<html>
<head>
<title>All books</title>
</head>
<body>
<h1>Online Mybook - All books</h1>
<table border="1">
<tr>
<td width="80%"><p align="center"><i><b>book</b></i></td>
<td width="20%"><p align="center"><i><b>Date</b></i></td>
</tr>
<% @books.each do |book| %>
<tr>
<td><%= link_to book.title, :action => "show", :id => book.id %></td>
<td><%= book.buydate %></td>
</tr>
<% end %>
</table>
<p><%= link_to "Create new book", :action => "new" %></p>
</body>
</html>
創(chuàng)建 categories 數(shù)據(jù)表
id int(11)
name varchar(50)
ruby script\generate controller Category
category_controller.rb:
class CategoryController < ApplicationController
scaffold :category
end
ruby script\generate model Category
為了讓 books 數(shù)據(jù)表包含類別字段,我們需要新增加一個 category_id字段,字段定義為 int 型與 categories 表的 id 字段類型相同。
book.rb 修改如下:
class Book < ActiveRecord::Base
belongs_to :category
end
這行代碼告訴 Rails, 一本書屬于一個類別
category.rb 修改如下:
class Category < ActiveRecord::Base
has_many :books
end
這行代碼告訴 Rails, 一個類別可以包含很多本書。
現(xiàn)在我們從新定義 edit 函數(shù),來覆蓋它的 scalffold 版本。
編輯 book_controller.rb 文件
class BookController < ApplicationController
scaffold :book
def list
@books = Book.find_all
end
def edit
@book = Book.find(@params["id"])
@categories = Category.find_all
end
end
新建一個 edit.rhtml:
<html>
<head>
<title>Edit book</title>
</head>
<body>
<h1>Edit book</h1>
<form action="../update" method="POST">
<input id="book_id" name="book[id]" size="30"
type="hidden" value="<%= @book.id %>" />
<p><b>Title</b><br>
<input id="book_title" name="book[title]" size="30"
type="text" value="<%= @book.title %>" />
</p>
<p><b>Description</b><br>
<input id="book_description" name="book[description]"
size="30" type="text"
value="<%= @book.description %>" />
</p>
<p><b>Category:</b><br>
<select name="book[category_id]">
<% @categories.each do |category| %>
<option value="<%= category.id %>"
<%= ' selected' if category.id == @book.category.id %>>
<%= category.name %>
</option>
<% end %>
</select></p>
<input type="submit" value="Update" />
</form>
<a href="/book/show/<%= @book.id %>">
Show
</a> |
<a href="/book/list">
Back
</a>
</body>
</html>
編輯list.rhtml
<html>
<head>
<title>All books</title>
</head>
<body>
<h1>Online Mybook - All books</h1>
<table border="1">
<tr>
<td width="80%"><p align="center"><i><b>書名</b></i></td>
<td width="20%"><p align="center"><i><b>類別</b></i></td>
<td width="20%"><p align="center"><i><b>購買日期</b></i></td>
</tr>
<% @books.each do |book| %>
<tr>
<td><%= link_to book.title, :action => "show", :id => book.id %></td>
<td><%= book.category.name %></td>
<td><%= book.buydate %></td>
</tr>
<% end %>
</table>
<p><%= link_to "Create new book", :action => "new" %></p>
</body>
</html>
rails的缺點:
1:Rails 畢竟還沒有大型項目的成功案例.
2:Rails 是最近剛剛出來的框架,還不夠成熟。
3:ruby 缺少組件的架構(gòu)。
我覺得未來應(yīng)用程序框架應(yīng)該具備兩個特點,那就是:“易用性”和“組件”。從現(xiàn)在的情形看,Rails 具備了“易用性”的特點,而大多數(shù) Java 框架具備了“組件”的特點。我覺得:“好的框架的復(fù)雜性應(yīng)該被組件封裝在“黑箱”中,而“易用性”應(yīng)該體現(xiàn)在組件的使用上”。所以 Rails 的未來應(yīng)該向組件上發(fā)展,而 Java 框架應(yīng)該繼續(xù)在組件易用性上多做文章,兩者的趨勢是融合。