Send to Printer

smalltalk

Using LOBs with Oracle and VisualWorks

April 27, 2010 6:29:36.418

Today's Smalltalk Daily looks at using LOBs with Oracle (version 9 and up) with VisualWorks. If you're looking for a particular topic, you can find it with the Media Search application on our site.

The code used is below; To watch, click on the viewer:


"The following are examples to demonstrate performance improvement when 
setting the right size of LOB buffers."

"Connect to an Oracle database."
conn := OracleConnection new.
conn username: 'username';
password: 'password';
environment: 'ORACLEDB'.
conn connect.
sess := conn getSession.

"Drop the test table if existed."
sess prepare: 'DROP TABLE TestLob';
	execute;
	answer;
	answer.

"Create a test table."
sess prepare: 'CREATE TABLE TestLob (A CLOB, B BLOB, C INTEGER)';
	execute;
	answer;
	answer.

conn begin.
insertSQL := 'INSERT INTO TestLob (a, b, c) VALUES (?, ?, ?)'.
sess prepare: insertSQL.
clobLength := 2097152. "2MB"
blobLength := 2097152. "2MB"
clob := String new: clobLength withAll: $a.
blob := ByteArray new: blobLength withAll: 1.

sess lobBufferSize: 32768.  "32KB is the default buffer size for read/write Large Objects."

insertTime1 := Time millisecondsToRun: [
		sess bindInput: (Array with: clob with: blob with: 1);
		execute;
		answer;
		answer.
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent for insert when lobBufferSize is 32KB ', insertTime1 asFloat printString.

"Set lobBufferSize to 1MB"
sess lobBufferSize: 1048576.  "1MB"

insertTime2 := Time millisecondsToRun: [
		sess bindInput: (Array with: clob with: blob with: 2);
		execute;
		answer;
		answer.
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent  for insert when lobBufferSize is 1MB: ', insertTime2 asFloat printString.

conn commit.

conn begin.
sess := conn getSession.
selectSQL := 'SELECT * FROM TestLob'.
sess answerLobAsValue. "Get LOBs back as values."
sess defaultDisplayLobSize: 2097152. "We want every byte of the LOBs returned."

sess lobBufferSize: 32768.  "32KB is the default buffer size for read/write Large Objects."
selectTime1 := Time millisecondsToRun: [ | ans1 |
		sess prepare: selectSQL;
		execute.
		ans1 := sess answer.
		ans1 upToEnd.
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent for select when lobBufferSize is 32KB ', selectTime1 asFloat printString.

"Set lobBufferSize to 1MB"
sess lobBufferSize: 1048576.  "1MB"

selectTime2 := Time millisecondsToRun: [ | ans2 | 
		sess prepare: selectSQL;
		execute.
		ans2 := sess answer.
		ans2 upToEnd.
].

"Print out the miliseconds spent."
Transcript 
	cr; 
	show: 'Time spent  for select when lobBufferSize is 1MB: ', selectTime2 asFloat printString.

conn rollback.


You can download the video directly here. If you like this kind of video, why not subscribe to "Smalltalk Daily"?

Technorati Tags: , , ,

posted by James Robertson

 Share Tweet This