C++通過occi執行select語句、儲存過程、函式,取cursor值示例
#include <stdio.h>
#include <iostream>
#include <String>
using namespace std;
#include <occi.h>
#include <occiControl.h>
using namespace oracle::occi;
/*
void selectDemo()
{
Environment *pEnv = NULL; //定義執行環境物件
Connection *pConn = NULL; //定義連結物件
Statement *pStmt = NULL; //定義執行語句物件
ResultSet *pRs = NULL; //定義結果集物件
const string szUserName = "demo"; //設定使用者名稱
const string szUserPwd = "demo"; //設定密碼
const string szConnection = "icss"; //設定要連結的資料庫,"icss"是資料庫名
try
{
pEnv = Environment::createEnvironment(); //建立了一個執行環境
pConn = pEnv->createConnection(szUserName, szUserPwd, szConnection);
//建立了一個連結,有三個引數。
if ( NULL == pConn) //如果連結建立失敗,執行以下程式碼
{
cout << "Connection Failure" << endl;
return;
}
pStmt = pConn->createStatement(); //通過connection物件建立一個statement物件
string strSql = "select * from test1";
pStmt -> setSQL(strSql); //設定語句執行物件的屬性
pRs = pStmt->executeQuery(); //執行呼叫,返回結果集物件
while ( pRs -> next()) //對結果集遍歷,輸出結果集裡的資料
{
cout << pRs->getInt(1) << " " << pRs->getString(2) << endl;
} //getInt()和getString()方法的使用取決於資料集裡資料的型別。1和2指第一、第二個欄位
}
catch ( SQLException ex)
{
cout << ex.getMessage() << endl;
}
pStmt -> closeResultSet(pRs); //statement物件呼叫方法關閉資料集
pConn -> terminateStatement(pStmt); //connection物件呼叫terminateStatement()方法關閉statement物件
pEnv -> terminateConnection(pConn); //environment物件呼叫方法關閉connection物件
Environment::terminateEnvironment(pEnv); //關閉環境物件。
//return 0;
}
void procedureDemo()
{
Environment *pEv = NULL;
Connection *pConn = NULL;
Statement *pStmt = NULL;
const string username = "demo";
const string password = "demo";
const string database = "icss";
try
{
pEv = Environment::createEnvironment();
pConn = pEv->createConnection(username, password, database);
if ( NULL == pConn)
{
cout << "Connection Failure!" << endl;
return;
}
pStmt = pConn->createStatement("BEGIN sp_selectspecial(:1, :2, :3); end;");
//執行儲存過程與執行SQL語句的不同:執行sql語句時,createstatement的引數是select引數。而執行儲存過程時
//createstatement的引數是“BEGIN SPNAME(PARAM1, PARAM2 …); end;”。
pStmt -> setInt(1, 43);
pStmt -> registerOutParam(2, OCCISTRING, 30, "");
pStmt -> registerOutParam(3, OCCISTRING, 30, "");
//pStmt -> registerOutParam(4, OCCINUMBER, 10, "");
//pStmt -> registerOutParam(5, );
int updateCount = pStmt->execute();
cout << pStmt->getString(2) << " " << pStmt->getString(3) << endl;
pConn->terminateStatement(pStmt);
pEv->terminateConnection(pConn);
Environment::terminateEnvironment(pEv);
}
catch ( SQLException ex)
{
cout << ex.getMessage() << endl;
}
}
void functionDemo()
{
Environment *pEvn = NULL;
Connection *pConn = NULL;
Statement *pStmt = NULL;
const string username = "demo";
const string password = "demo";
const string database = "icss";
try
{
pEvn = Environment::createEnvironment();
pConn = pEvn->createConnection(username, password, database);
if ( NULL == pConn)
{
cout << "Connection Failure!" << endl;
return;
}
pStmt = pConn->createStatement(" BEGIN :1:=fun_GetSalary(:2); END; ");
pStmt->registerOutParam(1, OCCIINT,30,"");
//try
//{
pStmt->setInt(2,2);
//}
//catch ( SQLException ex)
//{
// cout << ex.getMessage() << endl;
//}
pStmt->executeUpdate();
cout << pStmt->getInt(1) << endl;
}
catch ( SQLException ex)
{
cout << ex.getMessage() << endl;
}
}
*/
void cursorDemo()
{
Environment *pEv = NULL;
Connection *pConn = NULL;
Statement *pStmt = NULL;
ResultSet *pRs = NULL;
const string username = "demo";
const string password = "demo";
const string database = "icss";
try
{
pEv = Environment::createEnvironment();
pConn = pEv->createConnection(username, password, database);
if ( NULL == pConn)
{
cout << "Connection Failure!" << endl;
return;
}
pStmt = pConn->createStatement("BEGIN sp_GetSpecialByID(:1, :2, :3, :4, :5); end;");
//執行儲存過程與執行SQL語句的不同:執行sql語句時,createstatement的引數是select引數。而執行儲存過程時
//createstatement的引數是“BEGIN SPNAME(PARAM1, PARAM2 …); end;”。
pStmt -> setInt(1, 12);
pStmt -> setString(2, "");
pStmt -> setString(3, "");
pStmt -> setInt(4, -1);
pStmt -> registerOutParam(5, OCCICURSOR);
int updateCount = pStmt->execute();
pRs = pStmt->getCursor(5);
pRs->next();
cout << pRs->getString(2) << endl;
pStmt->closeResultSet(pRs);
pConn->terminateStatement(pStmt);
pEv->terminateConnection(pConn);
Environment::terminateEnvironment(pEv);
}
catch ( SQLException ex)
{
cout << ex.getMessage() << endl;
}
}
int main(int argc, char* argv[])
{
//procedureDemo();
//selectDemo();
//functionDemo();
cursorDemo();
return 0;
}
相關文章
- PostgreSQL獲取建表語句儲存過程SQL儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- 深入解讀MySQL InnoDB儲存引擎Update語句執行過程MySql儲存引擎
- MySQL儲存過程語句及呼叫MySql儲存過程
- MySQL儲存過程 (即函式)MySql儲存過程函式
- mySql 儲存過程與函式MySql儲存過程函式
- SQL server儲存過程函式SQLServer儲存過程函式
- MySQL 儲存過程和函式MySql儲存過程函式
- MySQL儲存過程和函式MySql儲存過程函式
- mysql執行sql語句過程MySql
- openGauss 函式及儲存過程支援函式儲存過程
- 儲存過程vs.函式QM儲存過程函式
- EF中使用SQL語句或儲存過程SQL儲存過程
- mysql和orcale的儲存過程和儲存函式MySql儲存過程儲存函式
- MySQL自定義函式與儲存過程MySql函式儲存過程
- 函式儲存過程併發控制-案例函式儲存過程
- 七、函式-儲存過程-觸發器函式儲存過程觸發器
- Mysql中儲存過程、儲存函式、自定義函式、變數、流程控制語句、游標/遊標、定義條件和處理程式的使用示例MySql儲存過程儲存函式變數
- MySQL入門--儲存過程(PROCEDURE)和儲存函式(FUNCTION)MySql儲存過程儲存函式Function
- Oracle儲存過程乾貨(二):PLSQL控制語句Oracle儲存過程SQL
- PostgreSQL的insert語句執行過程分析SQL
- 一條sql語句的執行過程SQL
- mysql儲存過程及日期函式實踐MySql儲存過程函式
- mysql儲存過程procedure、函式function的用法MySql儲存過程函式Function
- Oracle儲存過程乾貨(三):PLSQL迴圈語句Oracle儲存過程SQL
- 金倉資料庫KingbaseES儲存過程 RETURN語句資料庫儲存過程
- js函式執行過程的探究JS函式
- Oracle資料庫SQL語句執行過程Oracle資料庫SQL
- GaussDB SQL查詢語句執行過程解析SQL
- MySQL 查詢語句執行過程淺析MySql
- [zebra原始碼]分片語句ShardPreparedStatement執行過程原始碼
- day25-索引和函式及儲存過程索引函式儲存過程
- Mysql儲存過程 變數,條件,迴圈語句用法MySql儲存過程變數
- 如何匯出儲存過程、函式、包和觸發器的定義語句?如何匯出表和索引的建立語句?儲存過程函式觸發器索引
- select通過onchange獲取每次改變的值
- Select語句執行順序
- MySQL探祕(二):SQL語句執行過程詳解MySql
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程