diff options
author | Bernard Normier <bernard@zeroc.com> | 2006-08-10 18:36:30 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2006-08-10 18:36:30 +0000 |
commit | 667420c66b32e2200fd15c57e108a35d40499d48 (patch) | |
tree | 11c38ec276c28932ce631189954d25472031a2cc /cpp/demo/Database/Oracle/proc/DeptFactoryI.pc | |
parent | remove redundant batch labels (diff) | |
download | ice-667420c66b32e2200fd15c57e108a35d40499d48.tar.bz2 ice-667420c66b32e2200fd15c57e108a35d40499d48.tar.xz ice-667420c66b32e2200fd15c57e108a35d40499d48.zip |
Oracle Pro*C demo
Diffstat (limited to 'cpp/demo/Database/Oracle/proc/DeptFactoryI.pc')
-rw-r--r-- | cpp/demo/Database/Oracle/proc/DeptFactoryI.pc | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/cpp/demo/Database/Oracle/proc/DeptFactoryI.pc b/cpp/demo/Database/Oracle/proc/DeptFactoryI.pc new file mode 100644 index 00000000000..16119d6536b --- /dev/null +++ b/cpp/demo/Database/Oracle/proc/DeptFactoryI.pc @@ -0,0 +1,118 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2006 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <DeptFactoryI.h> +#include <Util.h> +#include <sqlca.h> + +EXEC SQL WHENEVER SQLERROR DO handleSqlError(sqlca, ctx); + +using namespace std; + + +DeptFactoryI::DeptFactoryI(const CurrentSqlContext& currentCtx, const string& deptCategory) : + _currentCtx(currentCtx), + _deptCategory(deptCategory) +{ +} + +HR::DeptPrx +DeptFactoryI::createDept(int key, const HR::DeptDesc& desc, const Ice::Current& current) +{ + struct sqlca sqlca; + EXEC SQL BEGIN DECLARE SECTION; + sql_context ctx = _currentCtx; + int deptno = key; + const char* dname = desc.dname.c_str(); + const char* loc = desc.loc.c_str(); + EXEC SQL END DECLARE SECTION; + + EXEC SQL CONTEXT USE :ctx; + EXEC SQL INSERT INTO DEPT(deptno, dname, loc) + VALUES(:deptno, :dname, :loc); + EXEC SQL COMMIT; + + Ice::Identity deptId; + deptId.name = encodeName(deptno); + deptId.category = _deptCategory; + return HR::DeptPrx::uncheckedCast(current.adapter->createProxy(deptId)); +} + +HR::DeptPrxSeq +DeptFactoryI::findAll(const Ice::Current& current) +{ + struct sqlca sqlca; + EXEC SQL BEGIN DECLARE SECTION; + sql_context ctx = _currentCtx; + int deptno; + EXEC SQL END DECLARE SECTION; + + EXEC SQL CONTEXT USE :ctx; + EXEC SQL DECLARE depCursor1 CURSOR FOR SELECT DEPTNO FROM DEPT; + EXEC SQL OPEN depCursor1; + + EXEC SQL WHENEVER NOT FOUND DO BREAK; + + HR::DeptPrxSeq result; + + for(;;) + { + EXEC SQL FETCH depCursor1 INTO :deptno; + + Ice::Identity deptId; + deptId.category = _deptCategory; + deptId.name = encodeName(deptno); + + result.push_back( + HR::DeptPrx::uncheckedCast( + current.adapter->createProxy(deptId))); + } + + EXEC SQL CLOSE depCursor1; + EXEC SQL COMMIT; + return result; +} + + +HR::DeptPrxSeq +DeptFactoryI::findByName(const string& name, const Ice::Current& current) +{ + struct sqlca sqlca; + EXEC SQL BEGIN DECLARE SECTION; + const char* dname = name.c_str(); + sql_context ctx = _currentCtx; + int deptno; + EXEC SQL END DECLARE SECTION; + + EXEC SQL CONTEXT USE :ctx; + EXEC SQL DECLARE depCursor2 CURSOR FOR SELECT DEPTNO FROM DEPT + WHERE DNAME = :dname; + EXEC SQL OPEN depCursor2; + + EXEC SQL WHENEVER NOT FOUND DO BREAK; + + HR::DeptPrxSeq result; + + for(;;) + { + EXEC SQL FETCH depCursor2 INTO :deptno; + + Ice::Identity deptId; + deptId.category = _deptCategory; + deptId.name = encodeName(deptno); + + result.push_back( + HR::DeptPrx::uncheckedCast( + current.adapter->createProxy(deptId))); + } + + EXEC SQL CLOSE depCursor2; + EXEC SQL COMMIT; + return result; +} |