summaryrefslogtreecommitdiff
path: root/cpp/demo/Database/Oracle/proc/DeptFactoryI.pc
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2006-08-10 18:36:30 +0000
committerBernard Normier <bernard@zeroc.com>2006-08-10 18:36:30 +0000
commit667420c66b32e2200fd15c57e108a35d40499d48 (patch)
tree11c38ec276c28932ce631189954d25472031a2cc /cpp/demo/Database/Oracle/proc/DeptFactoryI.pc
parentremove redundant batch labels (diff)
downloadice-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.pc118
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;
+}